Java 类型4字节ABGR到类型3字节BGR的转换

Java 类型4字节ABGR到类型3字节BGR的转换,java,awt,bufferedimage,graphics2d,Java,Awt,Bufferedimage,Graphics2d,我有一个透明度为4BYTE\u ABGR imageType的BuffereImage类型,我想将其转换为3BYTE\u BGR BuffereImage类型。我试图在BGR-one型上画4BYTE-ABGR型图像,但它改变了颜色 这样做的目的是将透明图像置于白色背景上,因为如果一个人只是将TYPE_4BYTE_AGBR image写入.jpg,他将得到黑色ob透明区域。这是您需要的代码,您必须在具有alpha通道的新图像中使用100%alpha的相同颜色 // bufferedImage is

我有一个透明度为4BYTE\u ABGR imageType的BuffereImage类型,我想将其转换为3BYTE\u BGR BuffereImage类型。我试图在BGR-one型上画4BYTE-ABGR型图像,但它改变了颜色


这样做的目的是将透明图像置于白色背景上,因为如果一个人只是将TYPE_4BYTE_AGBR image写入.jpg,他将得到黑色ob透明区域。

这是您需要的代码,您必须在具有alpha通道的新图像中使用100%alpha的相同颜色

// bufferedImage is your image.
if (bufferedImage.getType() == BufferedImage.TYPE_3BYTE_BGR) {
    BufferedImage bff = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
    for (int y = 0; y < bufferedImage.getHeight(); ++y) {
        for (int x = 0; x < bufferedImage.getWidth(); ++x) {
        int argb = bufferedImage.getRGB(x, y);
        bff.setRGB(x, y, argb & 0xFF000000); // same color alpha 100%
        }
    }
    return bff;
} else {
    return bufferedImage;
}
//BuffereImage是您的映像。
if(BuffereImage.getType()==BuffereImage.TYPE\u 3BYTE\u BGR){
BuffereImage bff=新的BuffereImage(BuffereImage.getWidth(),BuffereImage.getHeight(),BuffereImage.TYPE_4BYTE_ABGR);
对于(int y=0;y
如果你想把一个透明的图像放在一个白色的背景上,你确实应该使用一个不同类型的新的BuffereImage。执行此操作的代码如下所示:

// bufferedImage is your image.
if (bufferedImage.getType() == BufferedImage.TYPE_4BYTE_ABGR) {
    for (int y = 0; y < bufferedImage.getHeight(); ++y) {
        for (int x = 0; x < bufferedImage.getWidth(); ++x) {
            int argb = bufferedImage.getRGB(x, y);
            if((argb & 0x00FFFFFF) == 0x00FFFFFF){ //if the pixel is transparent
                bufferedImage.setRGB(x, y, 0xFFFFFFFF); // white color.
            }
        }
    }
    return bufferedImage;
}
//BuffereImage是您的映像。
if(buffereImage.getType()==buffereImage.TYPE\u 4BYTE\u ABGR){
对于(int y=0;y
你说的“改变颜色”是什么意思?一些颜色?只有带alpha的像素?看起来颜色已反转。我想它只是使用了ABG作为BGR,而忽略了ABGR的红色部分。你能展示一下你用来绘制的代码吗,这导致了颜色的改变?我觉得很奇怪+我很好奇。:-)