Java Toolkit.getDefaultToolkit().createImage()与ImageIO.read()的比较
我正在使用Swing创建一个UI,我想在Java Toolkit.getDefaultToolkit().createImage()与ImageIO.read()的比较,java,image,swing,jpeg,javax.imageio,Java,Image,Swing,Jpeg,Javax.imageio,我正在使用Swing创建一个UI,我想在JLabel中显示一个图像。我使用的代码如下所示: JLabel label = new JLabel(new ImageIcon(ImageIO.read(new File("img.jpg")))); 如果我使用png图像,这很好,但是当涉及到jpg(只有其中一些图像)时,我会得到一个redish图像(与我在Paint.NET中看到的图像不同)。 我使用的图像如下: 所以我试着(作为替代): 有人知道为什么会这样吗?它是一种不受支持的特殊JPEG格
JLabel
中显示一个图像。我使用的代码如下所示:
JLabel label = new JLabel(new ImageIcon(ImageIO.read(new File("img.jpg"))));
如果我使用png
图像,这很好,但是当涉及到jpg
(只有其中一些图像)时,我会得到一个redish图像(与我在Paint.NET中看到的图像不同)。
我使用的图像如下:
所以我试着(作为替代):
JPEG
格式吗非常感谢看起来您在ImageIO中发现了一个bug。请阅读。。。(我可以复制红色,但它绝对不是它应该看起来的样子) 你可以试着
- 使用其他设置保存JPEG文件
- 使用其他程序打开/重新保存文件(希望获得更常见的JPEG编码)
- 或者使用Toolkit方法(如果您不控制图像)
Toolkit方法的唯一问题是getImage()方法在调用后立即返回,并且加载正在后台线程上进行,因此您无法立即开始使用Image对象 如前所述,您的JPEG图像可能包含虚假的透明度信息。一个简单的权宜之计是在具有兼容颜色模型的缓冲区中渲染图像,如图所示。是的。这就是为什么我想知道为什么人们会推荐另一种方式…等等,我在工具包Java文档中找不到任何
createImage(文件f)
。当然可以?很抱歉,我正在使用createImage(字符串路径)
,我编辑了这个问题…另请参见。
Toolkit.getDefaultToolkit().createImage(new File("img.jpg").getAbsolutePath());