【发布时间】:2016-08-03 04:35:44
【问题描述】:
我从事一个项目已经有一段时间了。我正在构建一个扑克牌套牌课程,最终将用于制作我自己的纸牌游戏。我决定使用图像作为卡片的索引,而不是让 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
【问题讨论】:
-
我不是图像专家,但我怀疑您必须将图像类型设置为
BufferedImage.TYPE_INT_ARGB以便看到 alpha 通道。您可能无法使用ImageIO.read(File)提供的默认值。如果这被证明是问题,那么问题是stackoverflow.com/q/4694153/18157 的重复,我通过简单的谷歌搜索找到了“java jgrame png 透明度” -
@Jim Garrison 他在您提供的问题中所做的是创建一个 JLabel,并将图像作为存储在标签中的图像图标。我想避免使用这种方法。我在发布此问题之前尝试过它,它显示图像但没有透明度。在您提供的问题中,OP 说透明部分显示为黑色,而我的情况并非如此。此外,我还没有使用过 BufferedImage.TYPE_INT_ARGB 并且提供的问题并没有提供太多关于如何使用该枚举的示例,假设它是一个枚举。