为什么这个 BufferImage 渲染方法有效?

Why does this BufferImage render method work?

在互联网上搜索主要游戏循环引擎的图形方法后,我发现了下面的代码,但对它的工作原理一无所知。

public class Game extends Canvas {

    private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer().getDataBuffer()).getData();

    private void tick() {
        for (int i = 0; i < pixels.length; i++) {
            pixels[i] = i;
        }
    }

    private void render() {
        BufferStrategy bs = getBufferStrategy();
        Graphics g = bs.getDrawGraphics();
        g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
        g.dispose();
        bs.show();
    }
}

这段代码有两点我不明白:

1) 在渲染方法中,将g设置为bs.getDrawGraphics(),然后使用图形,并处理图形对象。如果你不是从这个改变 bs,而是从 bs 设置 g,那么图像不应该用 g 破坏吗?

2) 设置图像变量,然后设置图像中的像素数组。如果不直接改变image变量,那么改变pixels数组后不设置怎么通过pixels数组改变image的值呢?

非常感谢。

  1. 您处理图形上下文,之前所做的任何更改都不受此影响,因为 Graphics 不是保存实际像素数据的对象。

  2. pixels 数组是对 BufferedImage 栅格的直接引用。它们是相同的东西,因此无需对 "flush" 像素变回图像施展任何魔法。