1

我正在关注一个教程来扩展我的知识,但是导师有时会认为有些事情不需要解释。

看看这段代码:

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);
}

我在画布上作画,令我大吃一惊的是,这会画出从黑色到蓝色的颜色。我想知道如何访问/修改红色和绿色的颜色(因为“像素”是单个整数的数组)。如果我将 RGB 替换为 BGR,则此颜色将变为红色。但这是一个旁注。编辑:绘制绿色和红色使用位移运算符<< and |。例如:int greenColor = 255<<16;int greenAndRed = 255<<16 | 255<<8; EDIT-END

这里的一个主要难题是为什么要绘制任何东西。为像素数组赋值如何更新图像?(我根本不理解字段声明。数组启动的目的是什么)。但是我对 Java 的了解告诉我这无关紧要。它是一个普通的 int 数组,带有普通的 int。有人可以告诉我发生了什么事吗?

编辑 问题已解决。实际上,图像数据发生变化并不奇怪,因为数组不像其他简单数据类型那样不可变。

4

1 回答 1

3

栅格是图像的支持数据模型。你在这里得到的int[] pixels是对该支持数据的引用。更改像素数组中的值实际上是更改支持数据的值,在图像中立即可见。

于 2013-11-12T22:09:53.697 回答