我正在使用Java中的图像处理库来操作图像。我所做的第一步是读取图像并创建一个java.awt.Image.BufferedImage
对象。我是这样做的,
BufferedImage sourceImage = ImageIO.read( new File( filePath ) );
上面的代码创建了一个带有DirectColorModel的BufferedImage对象:
rmask=ff0000 gmask=ff00 bmask=ff amask=0.
当我在我的Macbook上运行上述代码时,会发生以下情况。
但是当我在Linux机器(托管服务器)上运行相同的代码时,这将创建一个带有ColorModel的BufferedImage对象: pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@c39a20 transparency = 1 has alpha = false isAlphaPre = false.
我在两种情况下使用了相同的jpg图像。我不知道为什么在Mac和Linux上运行相同的图像的ColorModel不同。Mac的ColorModel有4个组件,而Linux的colormodel有3个组件。
由于这个问题产生了一个问题,我使用的图像处理库总是假定传递的图像的ColorModel中始终有4个组件,并在Linux框上运行时抛出数组越界异常。但在Macbook上,它可以正常运行。
再添加一些信息,一旦读取了图像,我打印出image.getType()
在Mac上->它返回TYPE_INT_RGB(值为1) 在Linux上->它返回TYPE_3BYTE_BGR(值为5)
我不确定我是否做错了什么或者库存在问题。请让我知道您的想法。如果我说得不清楚,请问我任何问题!
ImageIO.read
返回的图像的ColorModel
做出任何假设。 - finnwxrandr
等),它将转换为另一个值,因此最好将其转换为所需的模型。 - artless noise