4

透明度のある TYPE_4BYTE_ABGR imageType の BufferedImage があり、それを TYPE_3BYTE_BGR BufferedImage に変換したいと考えています。TYPE_3BYTE_BGR の上に TYPE_4BYTE_ABGR の画像を描画しようとしたのですが、色が変わってしまいました。

TYPE_4BYTE_AGBR 画像を .jpg に書き込むと、黒の透明領域が得られるため、白い背景に透明な画像を配置することが目的です。

4

1 に答える 1

1

これは必要なコードです。アルファ チャネルを使用して、新しい画像に 100% アルファで同じ色を配置する必要があります。

// 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;
}

白い背景に透明な画像を配置したい場合は、実際には異なるタイプの新しい BufferedImage を使用する必要があります。そのためのコードは次のとおりです。

// 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;
}
于 2013-09-19T10:07:10.670 に答える