【发布时间】:2019-11-09 04:23:26
【问题描述】:
我正在研究图像插值,我正在使用双三次插值将 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 时,alpha 值会被预乘到RGB 值,我认为它不应该影响图像的质量.
【问题讨论】:
-
输入图像是否也是 jpeg 格式? Jpeg 不支持 Alpha 通道。您在编写图像时使用的质量可能比原始图像中使用的质量低得多。
-
是的,原始图像是 jpeg 格式。我用 jpeg 写回了图像。
-
您可能想查看这个问题,以了解如何在写出 JPEG 时设置压缩/图像质量级别:stackoverflow.com/questions/17108234/…
标签: java image image-processing rgb rgba