如何在png图像中保持透明背景

时间:2016-08-03 04:35:45

标签: java image graphics

我一直在研究一个项目。我正在建立一个扑克牌套牌,我最终将用它制作我自己的单人纸牌游戏。我决定使用图像作为卡片的索引,而不是让java绘制它们。我在Illustrator中绘制了自己的套装,并将它们保存为具有透明背景的PNG。当我朗读它时,我能够将图像显示在我的程序中,但是当我将图像添加到我的JFrame时,背景颜色消失,导致我相信由于某种原因透明度没有被保留。我尝试了两种不同的方法将图像添加到我的GUI,并且两次都得到相同的结果。我尝试过的一种方法是这里建议的方法How to add an image to a JPanel? 我试过的另一种方法就是这里建议的方法How can I display a BufferedImage in a JFrame? 这两种方法都不是我想要的。我希望我的西装能够在屏幕上显示,并且能够看到背景。

这是我想要正常工作的当前代码,我确实知道它编译并运行得很好,但我希望能够仍然看到背景。

import java.io.File;
import java.io.IOException;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import javax.imageio.ImageIO;



public class ImageReadTest extends JPanel{
   public static void main(String[] args){
      //Just a simple test on reading pictures into a java file and drawing them
      //onto a JFrame
      System.out.println("Java Image Read Test");
      JFrame frame = new JFrame("Image Reader");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setBackground(Color.green);

      frame.add(new ImageReadTest());
      frame.pack();
      frame.setSize(250,250);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   private BufferedImage image;
   public ImageReadTest(){
      try{
         image = ImageIO.read(new File("Club.png"));
      } catch(IOException e){
         System.out.println("Error");
      }
   }
   @Override
   protected void paintComponent(Graphics g){
      super.paintComponent(g);
      g.drawImage(image, 90, 90, null);
   }
}//end class ImageReadTest

这是我测试代码的图片,感谢您花时间阅读和帮助! Club

1 个答案:

答案 0 :(得分:1)

问题不在于获取图像。该程序为您提供正确的结果,即图像的背景是透明的。但是ImageReadTest JPanel的颜色和ContentPane的{​​{1}}颜色相同。因此您无法检测到差异。

只需更换以下行

jFrame

有了这个

frame.setBackground(Color.green);

这里要理解的是,jPanel和jFrame之间还有一层,即ContentPane。

修改: 因为您希望使自己的窗格透明,所以必须将其不透明度设置为false。为此,请在构造函数中添加以下行。

frame.getContentPane.setBackground(Color.green);