1

我在保持图像透明时遇到问题。

假设我们有一个名为的图像imageA.png,我们想要导入它。为了让其他方法可以访问它,我们将首先声明:

private BufferedImage imageA;

然后导入它:

className(){
    try{
        imageA = ImageIO.read(className.class.getResourceAsStream("floor.png"));
    }catch(IOException ex){
        ex.printStackTrace();
    }
}

然后我们可以在一个paintComponent方法中使用它,如下:

public void paintComponent(Graphics g){
    g.drawImage(imageA, 0, 0, null);
    //using Graphics.drawImage(Image img, int dstx1, int dsty1, int dstx2, int dsty2,int srcx1, int srcy1, int srcx2, int srcy2, ImageObserver observer) in the real program, don't know if that matters?
}

现在假设在我的原始图片中,imageA.png有一个透明区域,现在由于某种原因丢失了。至少,在我的输出中。在我使用这种方式绘制图像的程序中,我将它绘制在另一个图像之上,但是在原始图像中它是透明的地方看到白色。为什么会这样,我该如何解决?

4

2 回答 2

1

在此处发布代码

  • add super.paintComponent(g), 清除以前的绘画,否则绘画累积

  • 不要调用repaint();inside paintComponent,因为可能会导致无限循环,从 inner repaint();,此方法以编程方式用于重新绘制,例如最好的方法,如果从Swing Timer

对你的问题

  • 为了获得更好的帮助,请尽快发布SSCCE,简短,可运行,可编译,带有从代码生成的 BuferredImage 或从互联网站点链接
于 2013-06-04T14:56:09.473 回答
1

我的猜测是你需要setOpaque(false)在你的组件中(覆盖的那个paintComponent(Graphics g))。

ImageIO 使图像的透明部分保持透明。

于 2013-06-04T20:24:46.223 回答