2013-10-23 29 views
0

我试图确定图像是黑白图像还是颜色(使用Java)。如果它有颜色,我需要向用户显示一条警告消息,说明颜色会丢失。java中的图像操作

对我有何建议?

+1

绝对的黑色和白色?还是灰度? – Maroun

+1

http://stackoverflow.com/questions/1604319/getting-pixel-data-from-an-image-using-java – lummycoder

+0

http://stackoverflow.com/questions/3703624/how-to-determine-if-an -Image-java的AWT-图像是-BW与 - 无彩色 –

回答

1

这是可能的。您可以使用ImageIO加载图像。

BufferedImage img = ImageIO.read(imageFile); 
int rgb = img.getRGB(x,y); 
Color color = new Color(rgb); 

但仍然需要创建一个算法,找到x,y边界并检查每个位置的颜色。

1

ImageIO将允许您像其他人提到的那样加载图像。

优化是可能的,这将有助于很多情况:如果图像是灰度开始 - 如在文件格式中显示“这是灰度图像”,则可以使用img.getColorModel().getColorSpace()来检测是否确定是否你有一个图像的颜色空间只包含灰色阴影。

对于索引调色板(例如GIF文件),您可以迭代颜色模型中的所有颜色,并快速确定是否有颜色(如果红色/绿色/蓝色值相同,则没有颜色)。

其余的,你将不得不从图像中采样像素(使用一些模式来走动图像,在位置之间跳过,所以你不会花大量时间在黑/白/灰色边界之前遇到彩色),并完成类似

Color c = new Color(img.getRGB(x,y)); 
boolean isGray = c.getRed() == c.getGreen() && c.getRed() == c.getBlue(); 
... 

在一些图像的大小,它可能变得过于昂贵遍历图像的每个像素,如果连一个单一的彩色像素存在于检测,并可能要承担有一定的颜色并始终警告用户。