【发布时间】:2013-11-12 22:06:32
【问题描述】:
我正在学习一个教程来扩展我的知识,但是导师有时会认为有些事情不需要解释。
看看这段代码:
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);
}
我在 Canvas 上作画,令我大吃一惊的是,这会画出从黑色到蓝色的颜色。我想知道如何访问/修改红色和绿色的颜色(因为“像素”是单个整数的数组)。如果我将 RGB 替换为 BGR,则此颜色将变为红色。但这是一个旁注。 编辑:使用位移运算符<< and | 绘制绿色和红色。例如:int greenColor = 255<<16; 或 int greenAndRed = 255<<16 | 255<<8; EDIT-END
这里的一个主要难题是为什么要绘制任何东西。为像素数组赋值如何更新图像? (我根本不理解字段声明。数组启动的目的是什么)。但我对 Java 的了解告诉我这无关紧要。它是一个普通的 int 数组,带有普通的 int。谁能告诉我这是怎么回事?
编辑 问题已解决。实际上,图像数据发生变化并不奇怪,因为数组不像其他简单数据类型那样不可变。
【问题讨论】:
-
system.out.println 确实返回 true,如果您将像素 [1] 更改为像素 [1]
-
@arynaq 哦,是的,对不起。那是一个错字。这个问题是基于我的一个谬误。我可以发誓数组是不可变的。我将删除 OP 的那部分。