1

我需要从像素的 RGB 颜色中创建一个 Color 对象(读取 PNG 文件的 BufferedImage 对象,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 信息不足以重新创建颜色?

4

1 回答 1

1

我认为问题在于您正在丢弃颜色中的 alpha 信息。我认为您需要执行以下操作:

int color = myImage.getRGB(x, y);
ColorModel model = myImage.getColorModel();
Color c = new Color(color, model.hasAlpha());
于 2012-05-08T18:57:45.303 回答