Java:检查BufferedImage是BGR还是RGB

时间:2016-09-12 01:50:17

标签: java

我有一个索引图像,我正在尝试检查bufferedImage是否有RGB或BGR颜色空间。

ColorModel colorModel = bufferedImage.getColorModel();
if(colorModel instanceof IndexColorModel) {
   // check if the color space for the buffered image is BGR or RGB
}

我尝试使用bufferedImage.getType()getType()方法返回TYPE_BYTE_INDEXED。如何检查此bufferedImage的颜色空间?

2 个答案:

答案 0 :(得分:1)

不幸的是,没有办法区分来​​自未知来源的RGB和BGR色彩空间通道,这只是一个属性必须由用户提供作为输入。图像结构只是三层/四层(取决于图像是否包含α层)具有范围[0-255]的整数值,并且难以确定这些像素值的颜色空间。我不确定是否有可以解决此问题的算法,但在所有情况下都会有错误率(取决于图像复杂度)。在我的情况下,让用户做出关于图像性质的决定是安全的。

答案 1 :(得分:0)

我不确定,但从API文档判断: (http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html#TYPE_BYTE_INDEXED

IndexColorModel将图像中的索引映射为真实颜色,有很多方法可以将红色,绿色或蓝色作为int(http://docs.oracle.com/javase/7/docs/api/java/awt/image/IndexColorModel.html)数组  也许你可以使用它们。

这意味着可能没有“RGB”或“BGR”,您的缓冲图像中的索引是由索引颜色模型(https://en.wikipedia.org/wiki/Indexed_color)定义的

这里只是一个猜测,但如果这可以帮助。