Java “使用RGB创建颜色”提供了与原始RGB不同的另一种颜色

Java “使用RGB创建颜色”提供了与原始RGB不同的另一种颜色,java,transparency,rgb,bufferedimage,color-space,Java,Transparency,Rgb,Bufferedimage,Color Space,我需要用像素的RGB颜色创建一个颜色对象(对于读取PNG文件的BuffereImage对象,BuffereImage颜色空间是BuffereImage.TYPE_4BYTE_ABGR)。但是在某些颜色上存在问题,请参阅下面的代码和输出。我猜这是某种颜色空间问题,但我不知道如何解决它):谢谢你的任何提示 // imagine some great loop for x,y around the following code int color = myImage.getRGB(x, y); Co

我需要用像素的RGB颜色创建一个颜色对象(对于读取PNG文件的BuffereImage对象,BuffereImage颜色空间是BuffereImage.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

还有一些。如果有帮助:例如,透明度变为黑色。我猜新颜色对象使用的是BuffereImage以外的其他颜色空间,但我不知道如何为新颜色对象设置颜色空间?还是RGB信息不足以重新创建颜色?

我认为问题在于您在颜色中丢弃了alpha信息。我认为你需要做以下几点:

int color = myImage.getRGB(x, y);
ColorModel model = myImage.getColorModel();
Color c = new Color(color, model.hasAlpha());

我认为问题在于,你把颜色中的alpha信息扔掉了。我认为你需要做以下几点:

int color = myImage.getRGB(x, y);
ColorModel model = myImage.getColorModel();
Color c = new Color(color, model.hasAlpha());