8

我正在使用 Swing 创建一个 UI,我想在JLabel. 我使用的代码如下:

 JLabel label = new JLabel(new ImageIcon(ImageIO.read(new File("img.jpg"))));

如果我使用png图像,这可以正常工作,但是当涉及到jpg(仅其中一些)时,我会得到一个偏红的图像(与我在 Paint.NET 中看到的不同)。我使用的图像是这个:img.jpg

所以我尝试了(作为替代方案):

Toolkit.getDefaultToolkit().createImage(new File("img.jpg").getAbsolutePath());
  1. 有谁知道为什么会这样?它是不支持的特殊JPEG格式吗?
  2. 我在这个论坛上读到大多数人推荐使用 ImageIO(例如这里)。为什么?

非常感谢

4

2 回答 2

8

正如这里所讨论的,您的 JPEG 图像可能包含虚假的透明度信息。一个简单的权宜之计是在具有兼容颜色模型的缓冲区中渲染图像,如此处所示

于 2012-08-20T18:32:11.837 回答
5

看起来您在 ImageIO.read 中发现了一个错误...(我可以重现红色,这绝对不是它应该的样子)。

你可以尝试

  • 使用其他设置保存 JPEG 文件
  • 使用其他程序打开/重新保存文件(希望获得更常见的 JPEG 编码)
  • 或使用 Toolkit 方法(如果您不控制图像)。

Toolkit 方法的唯一问题是 getImage() 方法在调用后立即返回,并且加载发生在后台线程上,因此您无法立即开始使用 Image 对象。

于 2012-08-20T17:25:55.290 回答