2010-12-06 154 views
3

我有一个从png文件创建的BufferedImage。创建它时,我将该类型设置为TYPE_INT_ARGB,它应该给我一个透明的图像。当我在JPanel内部使用paintComponent来绘制图像时,我得到一个黑色背景的图像。我真的需要透明,所以任何帮助都会有用。下面是清晰的代码:透明BufferedImage在JLabel上绘制时显示黑色背景

public class ImagePanel extends JPanel {  

    private static final long serialVersionUID = 1L; 
    private BufferedImage image; 

    public ImagePanel() { 
     this.image = null; 
    } 


    public void createImage(String fileName) { 
     this.image = ImageUtilities.getBufferedImage(fileName, this); 
     this.repaint(); 

    } 

    public void paint(Graphics g) { 
     g.drawImage(this.image, 0, 0, this); 
    } 
} 

这是我如何加载图像:

public class ImageUtilities { 

/** Create Image from a file, then turn that into a BufferedImage. 
*/ 

    public static BufferedImage getBufferedImage(String imageFile, Component c) { 
     Image image = c.getToolkit().getImage(imageFile); 
     waitForImage(image, c); 
     BufferedImage bufferedImage = new BufferedImage(image.getWidth(c), image.getHeight(c), 
        BufferedImage.TYPE_INT_ARGB); 
     Graphics2D g2d = bufferedImage.createGraphics(); 
     g2d.drawImage(image, 0, 0, c); 
     return(bufferedImage); 
    } 

还有最后一两件事要补充的是,这ImagePanel是另一个小组中,如果有任何意义。

回答

3

不知道这是否会解决您的问题,而是:

  • 重写paintComponent代替油漆(01​​)
  • 考虑使用较新的javax.imageio API
  • 确保面板不不透明(不透明=假)
+0

新的IO API取得了诀窍,尽管如果我们认为我使用的方法被认为是旧的,那么很高兴看到旧方法的解决方案,谢谢:)。 – gmunk 2010-12-06 18:31:16

2

您是否仅限于使用旧版本的Java?尝试使用ImageIO.read(fileName)加载图像文件。

+0

正如我在之前的评论中所说的那样,ImageIO.read做到了,现在只是好奇心,我会试着去看看如何以旧的方式完成它。谢谢:) – gmunk 2010-12-06 18:32:42

0

尝试此(即setComposite()):

g2d.setComposite(AlphaComposite.SrcOver); g2d.setPaint(backgroundColor); g2d.fillRect(0,0,w,h);