gpt4 book ai didi

java - 从 BufferedImage 读取像素 - 错误的颜色值

转载 作者:行者123 更新时间:2023-12-01 14:46:10 24 4
gpt4 key购买 nike

当一艘宇宙飞船被摧毁时,我创建包含宇宙飞船图像像素的列表。像素是我的 Pixel 类的对象。创建列表后,它会添加到主列表中,在其中对其执行各种操作。这就是我的代码的样子:

//Code which creates an array
List<Pixel> pixels = new LinkedList<>();
BufferedImage buff = (BufferedImage)image;
for (int px = 0; px < buff.getWidth(); px++) {
for (int py = 0; py < buff.getHeight(); py++) {
int rgb = buff.getRGB(px, py);
int red = (rgb & 0x00ff0000) >> 16;
int green = (rgb & 0x0000ff00) >> 8;
int blue = rgb & 0x000000ff;
int alpha = (rgb >> 24) & 0xff;
if (alpha == 255) {
pixels.add(new Pixel(px, py, red, green, blue));
}
}
}
//Pixel class constructor
Pixel(float x, float y, int red, int green, int blue) {
super(x, y);
BufferedImage buff = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
WritableRaster raster = buff.getRaster();
//LOOKS EVERYTHING IS OKAY SINCE THIS LINE SO THE ERROR MUST BE SOMEWHERE IN THOSE 2 LINES
raster.setPixel(0, 0, new int[]{red, blue, green, 255});
image = buff;
}

简短说明:图像是图像类型的私有(private)字段。它用在 repaint() 方法中,该方法使用 drawImage() 方法绘制像素。关于我的问题:一切都几乎正常。像素在正确的位置创建,但都是紫色的。它们具有不同的色调(较亮和较暗),但都是紫色的,而不是与图像颜色相同的颜色!为什么会发生这种情况?为什么是紫罗兰?有人可以帮助我理解这种奇怪的行为吗?

最佳答案

这可能是您的 setPixel 方法中绿色和蓝色值的混合。颜色通常按 RGB 顺序给出,这就是您从 BufferedImage 中解压它们的方式。

而不是

raster.setPixel(0, 0, new int[]{red, blue, green, 255});

尝试

raster.setPixel(0, 0, new int[]{red, green, blue, 255});

如果这不起作用,您可能需要修改数组中的不同变量顺序,直到看起来正确为止。

关于java - 从 BufferedImage 读取像素 - 错误的颜色值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com