gpt4 book ai didi

java - 是什么导致 Java JLabel 图标的图像质量差?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:31 24 4
gpt4 key购买 nike

Java JLabel 图标在 JFrame 中显示时像素失真。对于不同的 png 图像(所有 32x32),这种情况一直发生。我没有缩放图像,它们显示在程序 32x32 中,我在 JLabel 上使用 getWidthgetHeight 验证了这一点。每次运行程序时,失真都会出现在同一个地方,而不是随机出现。

使用下面提供的示例代码的屏幕截图。
example screenshot (1)

在此屏幕截图中,您可以看到一组 JLabel 图标,每个图标的影响都不同。
example screenshot (2)

从侧面调整窗口大小时,当图标随窗口移动时,扭曲会像垂直线一样在图标上移动。

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 运行时环境构建 1.8.0_202。

最佳答案

您可能认为您正在以 32x32 大小显示图像,但您的平铺图像示例表明并非如此。你有一个 9x2 的图标网格,它应该是 288x64 像素,但在你的示例图像中网格是 302x66。

如果仔细检查拼贴图像,您会发现各个拼贴显示的宽度为 34 像素 - 洋红色边框从 32 像素延伸到 66 像素。 (请注意,一些图 block 显示为 33 像素宽;看起来是 33、34、34、33、34...)

为了将图 block 拉伸(stretch)到更宽的宽度,某些列被加倍(红色边框),这会造成您看到的视觉故障。

marked up portion of provided sample image

您是否尝试过固定 JLabel 的大小而不是允许它根据其内容调整大小?

关于java - 是什么导致 Java JLabel 图标的图像质量差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56501102/

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