当前位置: 首页 > 知识库问答 >
问题:

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

武峻熙
2023-03-14

我刚刚浏览了一些关于如何在另一个像素阵列之上绘制像素阵列的代码,如下所示:

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个答案

扈昀
2023-03-14

给定算法,我们可以猜出原作者在想什么:

    < li> sp是“源位置”:源位图中行的开始位置 < li> dp是“目标位置”:目标位图中行的开始位置 < li> c是“颜色”:源像素值(其中负值是透明的)。
 类似资料:
  • 此组件渲染两次并抛出错误。我知道这个错误是因为它们在reduce函数中没有返回语句。但我不明白的是,为什么它会渲染两次? 此外,当我删除代码时,它只呈现一次。据我所知,一个组件只能在四种情况下重新渲染 状态的变化 道具的变化 强制渲染 父母重新渲染。 在我的例子中,父组件没有重新渲染(我通过在父组件中使用console.log检查了它),并且这个组件是无状态的,没有道具被传递给它。有人能解释一下这

  • 我写了一个函数: 我想的是用一个“cur”来记录这两个链表“a”和“b”中的每个节点。然后这两个链表'a'和'b'移动到它的下一个节点。然后转到下一个WHILE循环。 然而,这是错误的。当我调试时,在这个第一个WHILE循环中,当它完成这个

  • 主要内容:实例,实例,实例,实例元素是构成 React 应用的最小单位,它用于描述屏幕上输出的内容。 与浏览器的 DOM 元素不同,React 当中的元素事实上是普通的对象,React DOM 可以确保 浏览器 DOM 的数据内容与 React 元素保持一致。 将元素渲染到 DOM 中 首先我们在一个 HTML 页面中添加一个 id="example" 的 <div>: 在此 div 中的所有内容都将由 React DOM 来管

  • 问题内容: 我正在为我的第一个深度Pyglet项目开发2D Minecraft克隆,但遇到了一个问题。每当我在屏幕上有相当数量的块时,帧速率都会急剧下降。 这是我的渲染方法:我使用字典,键为元组(代表块的坐标),项为纹理。 我遍历整个字典并渲染每个块: PS sx和sy是屏幕滚动的坐标偏移 我想知道是否有一种方法可以更有效地渲染每个块。 问题答案: 我将尽力解释为什么以及如何在不真正了解代码外观的

  • 嘿,我不能正确理解这个JavaScript代码: 输出 所以我知道前四个输出的代码内部发生了什么,但无法理解最后四个输出的代码内部发生了什么,请有人详细解释最后四个输出的代码,这将对我真正有帮助。