我应该将 BufferedImage.TYPE_4BYTE_ABGR 转换为 BufferedImage.TYPE_3BYTE_BGR 吗?

Should I convert BufferedImage.TYPE_4BYTE_ABGR to BufferedImage.TYPE_3BYTE_BGR?

我正在处理图像插值,为此我使用双三次插值使用 AffinedTransformOp 将 java 中的图像分辨率加倍。我使用了 BufferedImage of [=14] =] 在进行放大时。当我尝试使用 ImageIO.write 保存我的放大图像时,我发现 openjdk 不支持 TYPE_4BYTE_ABGRjpeg 编码,所以我将这个放大图像从 TYPE_4BYTE_ABGR 转换为TYPE_3BYTE_BGR。当我将它保存在文件夹中时,发现这张高级图像占用的内存比原始图像占用的内存少(大约一半)。

所以我假设原始(输入)图像由四个通道表示 ARGB,而高档(输出)图像采用 3 个通道 RGB,这就是内存减少的原因。

现在我的问题是我应该使用这个转换吗?
是否有一些信息丢失了?
图像质量是否保持不变?

P.S:我从 ImageIO 的文档中了解到,当我们将 ARGB 转换为 RGB 时,alpha 值会预乘为 RGB 值,我认为它不应该影响图像的质量。

我解决了我的问题,希望分享我的答案。其实我原图的类型是灰度,我原图的颜色space是灰色(意思是只有一个8位的通道),质量是90。
当我使用[=10时出现了问题=] 用于放大而不是使用 TYPE_BYTE_GRAY。其次,当您尝试将此图像保存为 jpeg 格式的文件时,ImageIO.write 默认使用 75 压缩,因此图像尺寸会变小。您应该使用适合您的压缩系数,或者您应该将其保存为 PNG 格式。
您可以在 linux 中使用 identify -verbos image.jpg 查看有关图像的信息,并且可以看到颜色 space、图像类型和质量等
您可以检查此 post 以了解如何在 ImageIO.

中手动设置压缩质量