Toolkit.getDefaultToolkit().createImage() 与 ImageIO.read() [英] Toolkit.getDefaultToolkit().createImage() vs ImageIO.read()

查看:197
本文介绍了Toolkit.getDefaultToolkit().createImage() 与 ImageIO.read()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Swing 创建 UI,我想在 JLabel 中显示图像.我使用的代码如下:

I'm creating a UI using Swing and I want to display an image in a JLabel. The code I use is the following:

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

如果我使用 png 图像,这很好用,但是当涉及到 jpg(只有其中一些)时,我得到一张红色图像(与那个不同的图像)我在 Paint.NET 中看到).我使用的图像是这个:img.jpg

This works fine if I use png images but when it comes to jpg (only some of them), I get a redish image (a different one than the one I see in Paint.NET). The image I used is this one: img.jpg

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

So I tried (as an alternative):

Toolkit.getDefaultToolkit().createImage(new File("img.jpg").getAbsolutePath());

  1. 有人知道为什么会发生这种情况吗?它是一种不受支持的特殊 JPEG 格式吗?
  2. 我在这个论坛上读到大多数人推荐使用 ImageIO (此处 例如).为什么?
  1. Does anyone have an idea of why this happening? Is it a special JPEG format which is not supported?
  2. I've read on this forum that most people recommend to use ImageIO (here for example). Why?

非常感谢

推荐答案

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

As discussed here, your JPEG image may contain spurious transparency information. One simple expedient is to render the image in a buffer having a compatible color model, as shown here.

这篇关于Toolkit.getDefaultToolkit().createImage() 与 ImageIO.read()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆