Прозрачный BufferedImage показывает с черным фоном, в то время как нарисован на JLabel - PullRequest
3 голосов
/ 06 декабря 2010

У меня есть BufferedImage, который создается из файла PNG.При его создании я установил тип TYPE_INT_ARGB, который должен дать мне прозрачное изображение.Когда я использую paintComponent внутри JPanel для рисования изображения, я получаю изображение с черным фоном.Мне действительно нужно сделать его прозрачным, чтобы любая помощь была полезной.Вот код для ясности:

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);
   }

И последнее, что нужно добавить, это то, что эта панель изображений находится внутри другой панели, если этоимеет какое-либо значение.

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Не уверен, что это решит вашу проблему, но:

  • переопределить paintComponent вместо краски (http://download.oracle.com/javase/tutorial/uiswing/painting/closer.html)
  • рассмотрите возможность использования более нового API javax.imageio
  • убедитесь, что панель не является непрозрачной (непрозрачной = ложной)
2 голосов
/ 06 декабря 2010

Вы ограничены в использовании более старой версии Java? Попробуйте использовать ImageIO.read (fileName) для загрузки файла изображения.

0 голосов
/ 19 апреля 2012

Попробуйте это (т.е. setComposite ()):

g2d.setComposite (AlphaComposite.SrcOver); g2d.setPaint (BackgroundColor); g2d.fillRect (0, 0, ш, ч);

...