Должен ли я преобразовать BufferedImage.TYPE_4BYTE_ABGR в BufferedImage.TYPE_3BYTE_BGR? - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над интерполяцией изображения, для которой я использую бикубическую интерполяцию, чтобы удвоить разрешение изображения в java, используя AffinedTransformOp. Я использовал BufferedImage из TYPE_4BYTE_ABGR при выполнении масштабирования. Когда я попытался сохранить обратно свое высококлассное изображение, используя ImageIO.write, то обнаружил, что openjdk не поддерживает кодирование jpeg для TYPE_4BYTE_ABGR, поэтому я преобразовал это увеличенное изображение из TYPE_4BYTE_ABGR в TYPE_3BYTE_BGR. Когда я сохранил его в папке, то обнаружил, что память, занимаемая этим высококачественным изображением, намного меньше (примерно в половину времени), чем память, занятая исходным изображением.

Итак, я предполагаю, что исходное (входное) изображение представлено четырьмя каналами ARGB, в то время как высококлассное (выходное) изображение занимает 3 канала RGB, и поэтому получает меньше памяти.

Теперь мой вопрос, должен ли я использовать это преобразование?
Есть ли какая-то информация, которая теряется?
Качество изображения остается прежним?

PS: я прочитал из документации ImageIO, что когда мы конвертируем ARGB в RGB, альфа-значение предварительно умножается на RGB значения, и я думаю, что это не должно влиять на качество изображения. .

1 Ответ

0 голосов
/ 27 июня 2019

Я решил свою проблему и надеюсь поделиться своим ответом.На самом деле тип моего исходного изображения был Grayscale, а цветовое пространство моего исходного изображения было серым (имеется в виду только один канал с 8 битами) с качеством 90.
Проблема возникла, когда я использовал TYPE_4BYTE_ABGR для увеличения вместо использованияTYPE_BYTE_GRAY.Во-вторых, при попытке сохранить это изображение в файл в формате jpeg ImageIO.write по умолчанию использует сжатие 75, поэтому размер изображения будет небольшим.Вы должны использовать подходящий вам коэффициент сжатия или сохранить его в формате PNG.
Вы можете просматривать информацию о своем изображении с помощью identify -verbos image.jpg в Linux и видеть цветовое пространство, тип и качество изображения и т. Д.
Вы можете проверить это post , чтобы увидеть, как вручную установить качество сжатия в ImageIO.

...