我有一个具有透明度的 TYPE_4BYTE_ABGR imageType 的 BufferedImage,我想将其转换为 TYPE_3BYTE_BGR BufferedImage。我试图在 TYPE_3BYTE_BGR 之一上绘制 TYPE_4BYTE_ABGR 图像,但它改变了颜色。
目的是将透明图像放在白色背景上,因为如果只是将 TYPE_4BYTE_AGBR 图像写入 .jpg,他会得到黑色 ob 透明区域。
我有一个具有透明度的 TYPE_4BYTE_ABGR imageType 的 BufferedImage,我想将其转换为 TYPE_3BYTE_BGR BufferedImage。我试图在 TYPE_3BYTE_BGR 之一上绘制 TYPE_4BYTE_ABGR 图像,但它改变了颜色。
目的是将透明图像放在白色背景上,因为如果只是将 TYPE_4BYTE_AGBR 图像写入 .jpg,他会得到黑色 ob 透明区域。
这是您需要的代码,您必须将具有 100% alpha 的相同颜色放入具有 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;
}
如果您想将透明图像放在白色背景上,您确实应该使用不同类型的新 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;
}