【问题标题】:How can I get my JLabel Icon Images to be high resolution?如何让我的 JLabel 图标图像具有高分辨率?
【发布时间】:2020-06-01 15:52:17
【问题描述】:

我想在其角落制作一个带有小 jLabel(50x50) 的应用程序。

我现在遇到的问题是标签显示的图像看起来很糟糕。

我还在我桌面上的窗口中的快捷方式中添加了相同的图像作为图标作为比较。

左侧是 Windows,右侧是 Java JLabel。

如何在 Jave 中存档类似的缩放结果而不损失质量?

不需要使用JLabel。

代码:

    ImageIcon imgIcon = new ImageIcon(path);
    Image img = imgIcon.getImage();
    Image imgScaled = img.getScaledInstance((int) (getWidth()), (int) (getHeight()), 
    Image.SCALE_SMOOTH);

    ImageIcon image = new ImageIcon(imgScaled);
    label.setIcon(image);

编辑:

如果您查看这些 Google Chrome 图标,它们非常小,但仍然清晰且高分辨率,我如何在 Java 中存档?

【问题讨论】:

  • 您应该添加更多详细信息,例如您使用的布局管理器、JLabel 的大小等。JLabel 会根据您布局组件的方式分配的空间自动缩放图像。例如,如果您在微小的 JLabel 中使用 256x256 图标,则会出现锯齿。
  • 我明白你在说什么,但我怎样才能让 256x256 图标在例如 20x20 形状中保持高分辨率?它不必使用 JLabel。
  • 想想你在问什么。您希望图像在其原始大小的 5% 的空间中保持相同的分辨率吗?恐怕事情不会那样工作——这就是为什么 Android 应用程序,例如,为不同的显示尺寸包含不同的图标集。如果你的规模足够大,即使 EPS 看起来也会很笨重。
  • 这个(多种尺寸),或者使用矢量图形。
  • 但是,如果您查看 Google Chrome 图标,它们只选择了 25 像素但仍然清晰,这怎么可能?我用一个例子编辑了我的问题

标签: java image swing jlabel


【解决方案1】:

我看到了两个选项,或者可能是这两个选项的组合:

  1. 你为你的ImageIcon 使用了一个奇怪的分辨率图像
  2. 宽高比不相等,因此缩放比例偏斜

编辑 在第 2 种情况下,确保您用于从中获取尺寸的 JComponent(您正在调用的 getWidthgetHeight 上)具有相同的尺寸宽度和高度。

我以 62 像素的宽度/高度剪切了您的左侧图像。第一行显示缩放的图像,第二行显示当我首先在图形程序中将源图像缩小到 32px 时发生的情况:

如下所示,尺寸从 62 像素向上增加 10 像素。代码在 Java 1.8、Windows 10 上运行:

void addSeries(Image srcImg, JPanel targetPanel) {
    for (int i = 0; i < 50; i += 10) {
        int dimension = 62 + i;
        Image imgScaled = srcImg.getScaledInstance(dimension, dimension, Image.SCALE_SMOOTH);

        ImageIcon scaledIcon = new ImageIcon(imgScaled);
        JLabel label = new JLabel();
        label.setIcon(scaledIcon);
        targetPanel.add(label);
    }
}

【讨论】:

  • 感谢您的回答!我明白你想说的。我检查了图像大小,它是 512x512。使用 64x64 大小的图像,我得到相同的结果。我还将 JLabel 大小更改为 46x46,结果相同。我发现java认为我的屏幕尺寸是1760x960像素,但它实际上是2560x1440大。那么java扩展了整个应用程序吗?这可能是错误吗?
  • 如果我将图像缩小到 46x46 的大小,它看起来很模糊,但我希望它清晰且分辨率高,即使 JLabel 只有 10x10 大。这就是为什么我需要一个最小 256x256 的图像,然后“适合”到 10x10 的盒子中,而不会失去其高分辨率。
  • 一张 10x10 的图像只有 100 像素。不要期望在 100 像素内渲染的任何东西都是“高分辨率”
  • Andrew 如果您查看我在问题中显示的示例图像,Windows 快捷方式显示的图标与 Java sharp 显示的图标相关。但它们都以相同的屏幕尺寸显示。如果您查看其他带有小图标的程序,它们仍然非常清晰。如何在 Java 中存档?
【解决方案2】:

您可以在BufferedImage 中使用,这是JLabel 更高的分辨率。 您可以使用 ImageIO 类从 .png 文件创建 BufferedImage

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 2014-11-20
    • 1970-01-01
    • 2011-04-13
    • 2017-08-23
    • 2013-08-25
    • 2017-11-26
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多