当更新表示其栅格的int数组时,BufferedImage会自动更新

时间:2013-11-12 22:06:32

标签: java raster

我正在按照一个教程来扩展我的知识,但是导师有时候心态有些事情无需解释。

看一下这段代码:

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。有人能告诉我发生了什么事吗?

修改 问题已经解决。实际上,图像数据完全没有变化,因为数组不像其他简单的数据类型那样是不可变的。

1 个答案:

答案 0 :(得分:3)

栅格是图像的后备数据模型。您到达此处的int[] pixels是对该后备数据的引用。更改像素阵列中的值实际上是更改背景数据的值,在图像中立即可见。