gpt4 book ai didi

java - 在不透明的 BufferedImage 上绘制透明的 BufferedImage

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:39 28 4
gpt4 key购买 nike

我在绘制 BufferedImages 时遇到问题。我正在开发基于 2D 图 block 的 map 编辑器,当我绘制图 block 时,它首先绘制较低层,然后绘制顶层。像这样:

public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(tileLayer, 0, 0, null);
g.drawImage(objectLayer, 0, 0, null);
}

请注意,此方法位于扩展 JLabel 的类中。它实际上是重绘设置的ImageIcon。现在,要理解这个问题,您必须意识到在创建 objectLayer BufferedImage 之前,会检查每个像素的某种颜色。如果像素是该颜色,则该像素将设置为全白色,alpha 值为 0(这样它将是透明的)。示例:

    int transparentRed = transparentColor.getRed();
int transparentGreen = transparentColor.getGreen();
int transparentBlue = transparentColor.getBlue();


for (int x = 0; x < image.getWidth(); x++)
{
for (int y = 0; y < image.getHeight(); y++)
{
int color = i.getRGB(x, y);

int red = (color & 0x00FF0000) >> 16;
int green = (color & 0x0000FF00) >> 8;
int blue = color & 0x000000FF;

// If the pixel matches the specified transparent color
// Then set it to an absolute white with alpha at 0
if (red == transparentRed && green == transparentGreen && blue == transparentBlue)
i.setRGB(x, y, 0x00FFFFFF);
}
}

return i;

重点是在下层上绘制顶层,而不影响任何先前放置的下层像素。顶层的白色像素不应该出现。

问题是这对某些图像有效,而对其他图像则无效。在某些图像上,当我去绘制顶层时,它只是以任何方式绘制白色(就好像 alpha 值未设置为 0 一样),而在其他图像上,它就像一个魅力,并且不绘制白色像素。

我一直只使用 .png 图像,所以我知道它与格式无关。我已经尝试了很多不同的事情,但如果有人可以提供帮助,我就会陷入困境。

最佳答案

我相信默认情况下 BufferedImage 不支持 Alpha channel 。构造BufferedImage时,传入BufferedImage.TYPE_INT_ARGB解决了这个问题。

关于java - 在不透明的 BufferedImage 上绘制透明的 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144599/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com