如何将带有Alpha的Type_Byte_Binary BufferedImage转换为TYPE_4BYTE_ABGR

时间:2015-03-05 23:54:31

标签: java image bufferedimage

我正在使用代码

BufferedImage imgIn = ImageIO.read(is);

    BufferedImage image;
    if (imgIn.getType() != BufferedImage.TYPE_BYTE_INDEXED) {
        image = new BufferedImage(imgIn.getWidth(), imgIn.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
        ColorConvertOp cco = new ColorConvertOp(imgIn.getColorModel()
                .getColorSpace(), image.getColorModel().getColorSpace(), null);
        cco.filter(imgIn, image);
    } else {
        image = imgIn;
    }

当我拉入Bit Depth为4的图像时,它会使imgIn成为Type_Byte_Binary。当它被转换为Type_4Byte_ABGR时,任何具有部分透明度的东西都会改变颜色并失去所有alpha。完全透明的像素和完全不透明的像素保持不变。

我能做些什么来保持部分透明的像素不变?

感谢。

1 个答案:

答案 0 :(得分:1)

很可能ColorConvertOp不是你在这里的所在,因为图像全部是RGB(sRGB)颜色空间(IndexColorModel不支持其他颜色空间)。

相反,只需将TYPE_BYTE_INDEXEDTYPE_BYTE_BINARY绘制到TYPE_4BYTE_ABGR图片上,即可保留任何透明度。

BufferedImage image = new BufferedImage(imgIn.getWidth(), imgIn.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);

Grphics2D g = image.createGraphics();

try {
    g.drawImage(imgIn, 0, 0, null);
}
finally {
    g.dispose();
}