TYPE_4BYTE_ABGR 到 TYPE_3BYTE_BGR 转换

发布于 2024-10-06 01:45:06 字数 222 浏览 11 评论 0原文

我有一个具有透明度的 TYPE_4BYTE_ABGR imageType 的 BufferedImage,我想将其转换为 TYPE_3BYTE_BGR BufferedImage。我尝试在 TYPE_3BYTE_BGR 图像上绘制 TYPE_4BYTE_ABGR 图像,但它改变了颜色。

目的是将透明图像放在白色背景上,因为如果将 TYPE_4BYTE_AGBR 图像写入 .jpg,他会得到黑色 ob 透明区域。

I have a BufferedImage of TYPE_4BYTE_ABGR imageType with transparency and I want to convert it into TYPE_3BYTE_BGR BufferedImage. I tried to draw TYPE_4BYTE_ABGR image on TYPE_3BYTE_BGR one, but it changed colors.

The aim is to put transparent image on white background, because if one just writes TYPE_4BYTE_AGBR image into .jpg, he gets black ob transparent area.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

oО清风挽发oО 2024-10-13 01:45:06

这是您需要的代码,您必须将具有 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;
}

This is the code that you need, you have to put the same color with 100% alpha in a new image with alpha channel.

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

if you want to put a transparent image on a white background you should indeed use a new BufferedImage with different type. The code to do so is this:

// 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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文