我需要从像素的RGB颜色中创建一个Color对象(BufferedImage对象读取PNG文件,BufferedImage颜色空间为BufferedImage.TYPE_4BYTE_ABGR)。但是在某些颜色上存在问题,请参阅下面的代码和输出。我想这是一种颜色空间问题,但我不知道如何解决它):谢谢你的提示!
// imagine some great loop for x,y around the following code
int color = myImage.getRGB(x, y);
Color c = new Color(myImage.getRGB(x, y));
if(c.getRGB() != color)
System.out.println("fail " + color + " vs " + c.getRGB());
输出:
fail -116782582 vs -16119286
fail 0 vs -16777216
fail 117440511 vs -1
fail -1090519040 vs -16777216
fail 1488435127 vs -4737097
fail -1090453247 vs -16711423
等等。如果它有帮助:例如透明度变黑。我猜新的Color对象使用的是另一个颜色空间而不是BufferedImage,但我不知道如何为新的Color对象设置颜色空间?或者RGB信息是否不足以重新创建颜色?
答案 0 :(得分:1)
我认为问题在于你丢弃了颜色中的alpha信息。我认为您需要执行以下操作:
int color = myImage.getRGB(x, y);
ColorModel model = myImage.getColorModel();
Color c = new Color(color, model.hasAlpha());