【发布时间】:2019-10-23 08:40:28
【问题描述】:
Java JLabel 图标在JFrame 中显示失真像素。这与不同的 png 图像(所有 32x32)一致地发生。我没有缩放图像,它们显示在程序 32x32 中,我在 JLabel 上使用 getWidth 和 getHeight 进行了验证。每次运行程序时,失真都会出现在同一个地方,而不是随机出现。
在此屏幕截图中,您可以看到一组 JLabel 图标,每个图标的影响不同。
从侧面调整窗口大小时,随着图标随窗口移动,变形像一条垂直线一样在图标上移动。
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
public class FrameApp extends JFrame
{
public static void main(String[] args) throws IOException
{
FrameApp frameApp = new FrameApp();
}
private FrameApp() throws IOException
{
BufferedImage image;
URL url = new URL("http://i.stack.imgur.com/L5DGx.png");
image = ImageIO.read(url);
JLabel label = new JLabel(new ImageIcon(image));
add(label);
pack();
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
编辑:
我在 Windows 8.1 64 位上使用 JDK 11.0.3,Java SE 运行时环境 build 1.8.0_202。
【问题讨论】:
-
我猜这与图像缩放有关,您需要打开某种抗锯齿功能。虽然只是猜测,但可以为 Google 提供一些信息。
-
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) 例如,获取图像的一种方法是热链接到this Q&A 中看到的图像。例如。 This answer 指向嵌入在 this question 中的图像的热链接。
-
@AndrewThompson 我想我按照你的建议正确地编辑了我的问题,但仍然没有答案,而且它已经被否决了。这个问题是否不正确,您认为我应该放弃答案吗?谢谢
-
您使用的是哪个版本的 java?我尝试使用您的示例进行复制,但图像看起来非常好(openjdk 11.0.1)。
-
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)在 Windows 7 上也没有问题。
标签: java image swing jlabel imageicon