java在这个像素渲染算法中发生了什么?
我刚刚读了一些代码,介绍了如何在另一个像素阵列上绘制一个像素阵列,如下所示:
public class Bitmap {
private int[] pixels;
private int w, h;
public void draw(Bitmap b, int xp, int yp) {
int x0 = xp;
int x1 = xp+b.w;
int y0 = yp;
int y1 = yp+b.h;
if(x0 < 0) x0 = 0;
if(x1 > w) x1 = w;
if(y0 < 0) y0 = 0;
if(y1 > h) y1 = h;
for (int y = y0; y < y1; y++) {
int sp = (y - yp) * b.w - xp;
int dp = (y) * w;
for (int x = x0; x < x1; x++) {
int c = b.pixels[sp + x];
if (c < 0) pixels[dp + x] = b.pixels[sp + x];
}
}
}
}
如您所见,可以在另一个位图上的特定坐标上绘制位图对象
我不明白的是两个for循环。我知道,外部for循环是绘制位图的y轴,并启动内部for循环来绘制位图的x轴
现在我想到了这个:
int sp = (y - yp) * b.w - xp;
int dp = (y) * w;
sp和dp到底代表什么?那么“c”在后面的文章中是什么意思呢
int c = b.pixels[sp + x];
if (c < 0) pixels[dp + x] = b.pixels[sp + x];
?
提前感谢,致以最良好的问候
# 1 楼答案
根据算法,我们可以猜测原作者的想法:
sp
是“源位置”:源位图中行的开头dp
是“目标位置”:目标位图中行的开头c
是“颜色”:源像素值(负值是透明的)李>