【问题标题】:Toolkit.getDefaultToolkit().createImage() vs ImageIO.read()Toolkit.getDefaultToolkit().createImage() 与 ImageIO.read()
【发布时间】:2012-08-16 00:12:05
【问题描述】:

我正在使用 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(例如here)。为什么?

非常感谢

【问题讨论】:

  • 是的。这就是为什么我想知道为什么人们会推荐另一种方式......
  • 等等,我在 Toolkit Java 文档中找不到任何 createImage(File f)...确定吗?
  • 对不起,我正在使用createImage(String path),我编辑了问题...

标签: java image swing jpeg javax.imageio


【解决方案1】:

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

你可以试试

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2013-12-07
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多