gpt4 book ai didi

java - 使用 ImageIO.read 给出修改后的图像

转载 作者:行者123 更新时间:2023-11-30 02:51:38 24 4
gpt4 key购买 nike

我正在使用 JLabel 中的图像做一些事情,我注意到我使用的一些图像(包含黑色的图像)在标签中比预期的更亮是。图片是通过ImageIO#read(File)加载的。仅通过 ImageIcon 构造函数加载的图像看起来很正常。

这是我针对此图像进行的一个小测试:

Test image

JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.setSize(320, 320);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

URL imageURL = new URL("https://wiki.factorio.com/images/Crude-oil.png");

frame.add(new JLabel(new ImageIcon(ImageIO.read(imageURL))));

frame.add(new JLabel(new ImageIcon(imageURL)));

frame.setVisible(true);

结果:

Result

关于为什么会发生这种情况有什么想法吗?

最佳答案

这是已知的bug它发生在 ImageIO.read() 时无法找到图像的正确颜色模型。

相反,构造函数ImageIcon(Url)使用 Toolkit.getDefaultToolkit().getImage(Url) 检索图像时正确显示图像.

此错误也可能发生在其他图像扩展上。请参阅this .

编辑

向下滚动并比较下面链接的 PNG 部分中的颜色类型

http://regex.info/exif.cgi?imgurl=https://wiki.factorio.com/images/Crude-oil.png

http://regex.info/exif.cgi?imgurl=http://www.sherv.net/cm/emoticons/hand-gestures/victory-fingers-black-smiley-emoticon.png

除了两个图像都是 PNG 之外,您会发现两种颜色类型都不同。 ImageIO.read() 的问题的问题是它可以正确读取带 Alpha 的 RGB,但不能正确读取带 Alpha 的灰度

我还发现ImageIO.read().getType()返回 0 = TYPE_CUSTOM对于第一张图像,6 = TYPE_4BYTE_ABGR对于第二个。对于类型无法识别的图像,通常会返回 TYPE_CUSTOM

关于java - 使用 ImageIO.read 给出修改后的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38469342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com