如何确定一个图像(java.awt.Image)是黑白的,没有彩色?

4

我正在尝试确定一张图片是简单的黑白图片还是有颜色的图片(使用Java)。如果有颜色,我需要向用户显示一个警告信息,说明颜色将会丢失。

1个回答

9

BufferedImage类有一个方法int getRGB(int x, int y),它返回表示像素(x,y)的颜色的十六进制整数(还有另一个返回像素矩阵的方法)。通过这个方法,您可以获取r、g和b值,如下所示:

int r = (0x00ff0000 & rgb) >> 16;
int g = (0x0000ff00 & rgb) >> 8;
int b = (0x000000ff & rgb);

然后检查图像中每个像素的r、g和b值是否都相等。如果每个像素的r == g == b,则它是灰度图像。

这是我能想到的第一件事。我不确定在读入图像时是否会设置某种灰度标志。


我只关心纯黑和白色(不是灰度)与其他任何颜色区别,那么在这种情况下,我只需要担心当r、g和b均等于255或均等于0的时候吗? - Lukas
1
是的,应该是这样的。不过,如果你创建一个没有透明度的BufferedImage(例如,TYPE_INT_RGB),那么你可以只检查像素是否等于0xFFFFFF或0x0,并节省一些代码行。 - Tom Smilack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接