我一直在做一段时间的项目。我正在制作一张纸牌甲板课,我最终会用它来制作我自己的纸牌游戏。我决定使用图像作为卡片的索引,而不是让java绘制它们。我在Illustrator中绘制了自己的套装,并将它们保存为具有透明背景的PNG。我可以在我的程序中显示图像,但是当我将图像添加到我的JFrame时,背景颜色消失,导致我相信由于某种原因,透明度不被保留。我尝试了两种不同的方法将图像添加到我的GUI中,并且两次都有相同的结果。我试过的一种方法是这里建议的方法How to add an image to a JPanel? 和我试过的另一种方法是这里建议的方法How can I display a BufferedImage in a JFrame? 这两种方法都不是我正在寻找的。我希望我的西装能够在屏幕上显示,并能够看到背景。如何在png图片中保持透明背景
这里是当前的代码,我想正常工作,我意识到它编译和运行得很好,但我希望能够仍然能够看到背景。
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
我不是图像专家,但我怀疑你必须将图像类型设置为'BufferedImage.TYPE_INT_ARGB',以便看到alpha通道。您可能无法使用'ImageIO.read(File)'提供的默认值。如果事实证明这是问题,那么问题是http://stackoverflow.com/q/4694153/18157,我发现了一个简单的谷歌搜索“java jgrame PNG透明度” –
@Jim Garrison什么他在您提供的问题中所做的工作是创建一个带有图像的JLabel作为存储在标签中的图像图标。我想避免使用这种方法。我在发布这个问题之前尝试了它,它显示图像但没有透明度。在你提供的问题中,OP表示透明部分以黑色显示,而我不是这种情况。此外,我还没有与BufferedImage.TYPE_INT_ARGB合作过,并且提供的问题没有给出太多关于如何使用这个枚举的例子,假设它是一个枚举。 –