我正在按照一个教程来扩展我的知识,但是导师有时候心态有些事情无需解释。
看一下这段代码:
private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
someMethod() {
for (int i=0; i<pixels.length; i++) {
pixels[i] = i;
}
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
我在画布上画画,令我惊讶的是,它会画出从黑色到蓝色的颜色。我想知道如何访问/修改红色和绿色(因为“像素”是单个整数的数组)。如果我用BGR替换RGB,这种颜色将是红色。但这是一个旁注。 编辑:绘制绿色和红色使用bitshift运算符<< and |
。例如:int greenColor = 255<<16;
或int greenAndRed = 255<<16 | 255<<8;
编辑结束
这里的一个主要难题是为什么要绘制任何东西。如何为像素数组赋值更新图像? (我根本不理解字段声明。数组启动的是什么)。但我对Java的了解告诉我这是无关紧要的。它是一个普通的int数组,具有普通的int。有人能告诉我发生了什么事吗?
修改 问题已经解决。实际上,图像数据完全没有变化,因为数组不像其他简单的数据类型那样是不可变的。
答案 0 :(得分:3)
栅格是图像的后备数据模型。您到达此处的int[] pixels
是对该后备数据的引用。更改像素阵列中的值实际上是更改背景数据的值,在图像中立即可见。