我有一个索引图像,我正在尝试检查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
的颜色空间?
答案 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)定义的
这里只是一个猜测,但如果这可以帮助。