java可以加载透明的图像吗?

java可以加载透明的图像吗?,java,image,swing,jpanel,transparency,Java,Image,Swing,Jpanel,Transparency,我有一个透明的PNG图像。我使用这种格式是因为只有PNG可以支持透明度和alpha遮罩 我的目标是用这个图像绘制一个JPanel,让透明区域具有底层面板的颜色,并最终用图像制作一些动画 无论我遇到什么问题,当加载并在JPanel上绘制时,透明区域都变成了纯白 所以java不支持透明图像 class imgpanel extends JPanel{ BufferedImage image,backg; imgpanel(){ try { image = Imag

我有一个透明的PNG图像。我使用这种格式是因为只有PNG可以支持透明度和alpha遮罩

我的目标是用这个图像绘制一个JPanel,让透明区域具有底层面板的颜色,并最终用图像制作一些动画

无论我遇到什么问题,当加载并在JPanel上绘制时,透明区域都变成了纯白

所以java不支持透明图像

class imgpanel extends JPanel{
BufferedImage image,backg;
imgpanel(){
    try {
              image = ImageIO.read(new File("theimage.png"));
              backg = ImageIO.read(new File("backimage.png"));
           } catch (IOException ex) {
                System.out.println("No image found");
   }
    setPreferredSize(new Dimension(400,300));
}
 @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(backg,0,0,null);
        g.drawImage(image, 0, 0, null);
}
}

因此,我正在将透明的“theimage”绘制到不透明的“backimage”上。

是的,没有问题,不要使用调色板和索引颜色

试一试,无论图像是否真的是透明的,颜色中都有一个alpha分量。 例如,使用
test.html

<html>
<body>
<div style="background: url(backimage.png)"><img src="theimage.png"></div>
</body>
</html>

根据我的经验ImageIO.read通过选择错误的透明度/图像类型加载没有透明度的图像。因此,我使用一个变通方法-ImageIcon将其作为图像加载,可以使用预定义的图像类型BufferedImage.type_INT_ARGB将其绘制到空的BufferedImage中。不要忘了ImageIcon禁止垃圾回收器收集映像,如果之后未刷新映像

    ImageIcon imageIcon = new ImageIcon(imageAbsolutePath);
    Image tmpImage = imageIcon.getImage();

    BufferedImage image = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
    image.getGraphics().drawImage(tmpImage, 0, 0, null);
    tmpImage.flush();

    return image;

你能分享代码吗?你用什么方法添加图片?在某些库中,您可以添加图片并提供透明度。是的,它支持透明度。要获得更完整的答案,您需要显示一些代码(例如,如何绘制)。例如,@kiheru添加了代码片段ah,与两天前的代码相同。实际上,它的工作原理是正确的。请检查您正在使用的图像。在一些java版本中,我看到了加载带有索引颜色的PNG的错误行为。这不一定是问题所在,但我会从使用RGBA中的两个图像开始寻找,两个图像都具有一定的半透明性。这些图像并排打开,而不是一个覆盖另一个(对不起,这对我(FireFox+IE)有用,可能是
背景图片:…