Java ImageIO忽略PNG alpha通道
似乎加载了ImageIO.read的PNG忽略了alpha通道。 (我试过使用JRE 6更新20) 臭虫 例如:Java ImageIO忽略PNG alpha通道,java,image,image-processing,png,alpha,Java,Image,Image Processing,Png,Alpha,似乎加载了ImageIO.read的PNG忽略了alpha通道。 (我试过使用JRE 6更新20) 臭虫 例如: public class Test extends JFrame { public Test() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton b = new JButton("Test"); try { b.setIcon(new ImageIcon(ImageI
public class Test extends JFrame
{
public Test()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b = new JButton("Test");
try
{
b.setIcon(new ImageIcon(ImageIO.read(new File("D:\\image.png"))));
}
catch (IOException e2)
{
}
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
}
});
getContentPane().add(b, BorderLayout.CENTER);
setSize(500,500);
setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args)
{
new Test();
}
}您可以使用,它没有alpha透明错误。作为参考,讨论了PNG alpha通道的类似问题。您如何知道它忽略了alpha通道。下面的代码生成此屏幕截图: 代码:
publicstaticvoidmain(字符串[]args)引发异常{
URL=新URL(“http://upload.wikimedia.org/" +
“wikipedia/commons/4/47/PNG_transparency_display_1.PNG”);
Image=ImageIO.read(url);
JPanel bgPanel=newjpanel(newborderlayout()){{
设置不透明(假);
}
受保护组件(图形g){
矩形r=g.getClipBounds();
//油漆背景
int s=10;
对于(int y=r.y/s;y
根据我的经验-使用JDK 1.6.0_21进行测试,Java imageio png解码器部分支持透明性。它支持带有附加alpha通道的24位全彩色图像(每个像素总共32位),以及带有tRNS主干的索引彩色图像,tRNS主干包括一个alpha贴图,该贴图可以与现有RGB调色板组合,以定义哪种颜色是透明的。但它不支持带有tRNS主干的24位RGB,该主干包含图像的单个透明RGB颜色值。您的图像可能是imageio不支持的格式之一。发布一个演示此行为的精简应用程序如何?可能与有关。
public static void main(String[] args) throws Exception {
URL url = new URL("http://upload.wikimedia.org/" +
"wikipedia/commons/4/47/PNG_transparency_demonstration_1.png");
Image image = ImageIO.read(url);
JPanel bgPanel = new JPanel(new BorderLayout()) {{
setOpaque(false);
}
protected void paintComponent(Graphics g) {
Rectangle r = g.getClipBounds();
// paint bg
int s = 10;
for (int y = r.y / s; y < r.y + r.height; y += s) {
int o = (y % (2*s) == 0 ? s : 0);
for (int x = r.x / s + o; x < r.x + r.width; x += 2*s)
g.fillRect(x, y, s, s);
}
super.paintComponent(g);
}
};
bgPanel.add(new JLabel(new ImageIcon(image)) {{
setOpaque(false);
}});
JFrame frame = new JFrame("Test");
frame.add(bgPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(350, 300);
frame.setVisible(true);
}