gpt4 book ai didi

java - 这个像素渲染算法发生了什么?

转载 作者:行者123 更新时间:2023-12-02 05:22:15 28 4
gpt4 key购买 nike

我刚刚遇到了一些关于如何在另一个像素数组之上绘制像素数组的代码,如下所示:

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循环是绘制Bitmap的y轴,并启动内层for循环来绘制Bitmap的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];

提前致谢,最诚挚的问候

最佳答案

根据算法,我们可以猜测原作者的想法:

  • sp 是“源位置”:源位图中行的开头
  • dp 是“目标位置”:目标位图中行的开头
  • c 是“color”:源像素值(其中负值是透明的)。

关于java - 这个像素渲染算法发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26413189/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com