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

标签 java variables graphics game-engine

在互联网上寻找主游戏循环引擎的图形方法后,我发现了下面的代码,但对其工作原理知之甚少。

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) 在render方法中,将g设置为bs.getDrawGraphics(),然后使用图形,并处理图形对象。如果您不从此更改 bs,而是从 bs 设置 g,那么不应该用 g 销毁图像吗?

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

非常感谢。

最佳答案

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

  2. pixels 数组是对 BufferedImage 栅格的直接引用。它们是同一件事,因此不需要执行任何魔法将像素“刷新”回图像。

关于java - 为什么这个 BufferImage 渲染方法有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29296298/

相关文章:

variables - 使用算法在mathematica中命名变量

graphics - 用于图形应用程序的快速、像素精度 2D 绘图 API?

java - Java中的快速排序实现,枢轴选择

delphi - 将整数转换为字符串

java - Android 套接字连接问题

java - 在 OO 语言中初始化对象属性的最佳实践

c++ - 如何在 openGL 中模拟蟋蟀树桩

java - 在固定背景上旋转 2d 图形图像

java - 在 Java 中初始化非数字变量

java - Vaadin + TabSheet + Grails Service = 当前线程没有 session