我正在尝试确定图像是否是黑白图像,或者它是否有颜色(使用 Java)。如果它有颜色,我需要向用户显示颜色将丢失的警告消息。
对我有什么建议吗?
有可能的。您可以使用 ImageIO 加载图像。
BufferedImage img = ImageIO.read(imageFile);
int rgb = img.getRGB(x,y);
Color color = new Color(rgb);
但是您仍然需要创建一个算法来查找 x,y 边界并检查每个位置的颜色。
正如其他人提到的,ImageIO 将允许您加载图像。
可以进行优化,这在很多情况下都会有所帮助:如果图像一开始是灰度的 - 如文件格式显示“这是灰度图像”,您可以检测到使用img.getColorModel().getColorSpace()
该图像来确定您是否有图像颜色空间仅包括灰色阴影。
对于索引调色板(例如 GIF 文件),您可以迭代颜色模型中的所有颜色并快速确定是否有颜色(如果红色/绿色/蓝色值相同,则没有颜色)。
对于其余部分,您必须从图像中采样像素(使用一些模式来遍历在位置之间跳跃的图像,这样您就不会在遇到颜色之前花费大量时间在黑色/白色/灰色边框上)并执行就像是
Color c = new Color(img.getRGB(x,y));
boolean isGray = c.getRed() == c.getGreen() && c.getRed() == c.getBlue();
...
在某些尺寸的图像上,迭代图像的每个像素以检测是否存在单个彩色像素可能变得过于昂贵,并且您可能希望假设存在某种颜色并始终警告用户。