如何在阅读图像时保持透明度不变? (JAVA)

时间:2013-06-04 14:40:32

标签: java image graphics awt javax.imageio

我在保持图像透明方面遇到了问题。

假设我们有一个名为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中有一个透明区域,现在因某种原因丢失了。至少,在我的输出中。在我使用这种绘制图像的程序中,我将它绘制在另一个图像的顶部,但是看到白色在原始图像中它是透明的。为什么这样,我该如何解决?

2 个答案:

答案 0 :(得分:1)

发布在这里的代码

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

  • 不要在repaint();内拨打paintComponent,因为可以从内部repaint();引起无限循环,此方法以编程方式用于重新绘制,例如最好的方法,如Swing Timer

到你的问题

  • 通过代码生成的BuferredImage或从intenet网站链接发布SSCCE,简短,可运行,可编译,以获得更好的帮助

答案 1 :(得分:1)

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

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