gpt4 book ai didi

java - 在 BufferStrategy 上绘制图像的透明度

转载 作者:行者123 更新时间:2023-11-30 10:58:31 26 4
gpt4 key购买 nike

你好,

我尝试在 BufferStrategy 上使用其 Graphics 绘制图片。图片有透明背景,如果我在屏幕上绘制它,透明区域会变成黑色。

Blue example

蓝色的东西是我想画的图像,但没有黑色部分(在原始图片中它们不存在)。

这就是我画图的方式:

BufferedImage image = loadImage(path);

g.drawImage(image, x, y, null);

public BufferedImage loadImage(String path) {

ImageIcon icon = new ImageIcon(this.getClass().getClassLoader().getResource(path));

BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);

Graphics g = image.createGraphics();

icon.paintIcon(null, g, 0, 0);
g.dispose();

return image;

}

最佳答案

Andreas 的评论是正确的,但应该是 ARGB 而不是 RGBA

为此只需更改此行中的 BufferedImage.TYPE_INT_RGB:

BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);

BufferedImage.TYPE_INT_ARGB:

BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);


根据您的评论进行编辑,这是完整的答案:

除了将 BufferedImage 创建为 TYPE_INT_ARGB,您还需要使用 Graphics2D 将 AlphaComposite SRC_OVER 应用到您的缓冲图像,如下所示:

public static BufferedImage loadImage(String path)
{
ImageIcon icon = new ImageIcon(path);

//using TYPE_INT_ARGB
BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);

//changed to G2D change here
Graphics2D g2d = image.createGraphics();
//get alpha
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
//set alpha
g2d.setComposite(ac);

icon.paintIcon(null, g2d, 0, 0);
g2d.dispose();

return image;
}

关于java - 在 BufferStrategy 上绘制图像的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32223300/

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