2014-10-16 55 views
0

我只是碰到一些代码,就如何借鉴另一像素阵列看起来像这样的顶级像素阵列:这个像素渲染算法发生了什么?

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]; 
     } 
    } 
} 

}

,你可以看到,一个是能够得出一个位图对象位于另一个Bitmap顶部的特定坐标上。

我没有得到的是两个循环。我知道,外循环是绘制的位图的y轴,并启动内循环以绘制位图的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]; 

由于提前,考虑到算法,我们可以猜测一下原作者想问候

回答

2

  • sp是“源位置”:该行的源位图开始
  • dp是“目标位置”:目标位图中的行的开始
  • c是“颜色”:源像素值(其中负值是透明的) 。
+0

非常感谢你! – user2410644 2014-10-16 20:31:21