Я использую библиотеку обработки изображений в Java для манипулирования изображениями. Первый шаг, который я делаю, - это чтение изображения и создание объекта java.awt.Image.BufferedImage
. Я делаю это таким образом,
BufferedImage sourceImage = ImageIO.read( new File( filePath ) );
Приведенный выше код создает объект BufferedImage
с DirectColorModel
:
rmask = FF0000
gmask = ff00
bmask = ФФ
amask = 0.
Вот что происходит, когда я запускаю приведенный выше код на своем MacBook.
Но когда я запускаю этот же код на машине linux (размещенном сервере), это создает объект BufferedImage
с ColorModel
:
pixelBits = 24
numComponents = 3
цветовое пространство = java.awt.color.ICC_ColorSpace@c39a20
прозрачность = 1
имеет альфа = ложь
isAlphaPre = false.
Я использовал одно и то же изображение jpg в обоих случаях. Я не знаю, почему ColorModel
одного и того же изображения отличается при запуске на Mac и Linux. ColorModel
для Mac имеет 4 компонента, а colormodel для Linux - 3 компонента.
Существует проблема, возникающая из-за этого, библиотека обработки изображений, которую я использую, всегда предполагает, что в ColorModel всегда передается 4 компонента, и при запуске на linux box она выбрасывает исключение массива из границ. , Но на MacBook он работает нормально.
Добавив немного больше информации, Как только изображение прочитано, я распечатал image.getType()
- На Mac -> возвращает
TYPE_INT_RGB
(значение 1
)
- В Linux -> возвращает
TYPE_3BYTE_BGR
(значение 5
)
Я не уверен, что делаю что-то не так или есть проблема с библиотекой. Пожалуйста, поделись своими мыслями. Также задавайте мне любые вопросы, если я не имею смысла!