如何在高分辨率屏幕上正确缩放图像

Tho*_* S. 5 java swt

我们基于 SWT 的 Java 应用程序自动使用操作系统的默认字体大小并派生其他字体。因此,GUI 的文本在高分辨率屏幕上看起来很好(例如 2880 x 1620,Windows 8 在控制面板 > 外观和个性化 > 显示中配置为“较大”)。不幸的是,图像没有缩放,因此,例如,工具栏按钮显得太小。

在 OS X 上,高分辨率屏幕处理似乎很容易:虚拟分辨率只是尺寸的一半,但如何在似乎允许非整数缩放因子的 Windows 上进行缩放?如何检测何时扩展、何时不扩展?

更新 看起来这个 SWT 问题涵盖了类似的问题。

fla*_*nze 2

看一下Neon (4.6) M6 - 新的和值得注意的,里程碑版本包含一些图像的自动缩放(例如工具栏)。

SWT 提供基于分辨率的自动缩放

SWT 现在可以在 Windows 和 Linux 上的高 DPI 显示器上自动缩放图像,类似于 OS X 上的 Mac Retina 支持。在没有高分辨率图像的情况下,SWT 将自动缩放可用图像,以确保基于 SWT 的应用程序(例如Eclipse 根据显示器的分辨率按比例缩放。

在此输入图像描述

在 Windows 和 GTK 上,可以通过在 eclipse.ini 中或在命令行中 -vmargs 之后将此 VM 参数设置为 false 来禁用此功能:

-Dswt.enable.autoScale=false

在 Mac 上无法禁用自动缩放,因为它是由操作系统提供的。

注意事项:我们知道某些缩放图像在比例因子小于 200% 时看起来很糟糕。这一点在M7中将会得到改善。此外,我们正在努力在 Platform UI 中支持高 DPI 图像,以便插件提供商可以添加高 DPI 图标,而无需进行任何代码更改。



或者这可能有帮助,在 Eclipse Mars API 中添加了高分辨率

添加了新的 API,以支持在高 DPI 显示器上渲染高分辨率图像。Image 类中添加了两个构造函数。它们接受图像提供者回调,允许客户端提供依赖于分辨率的图像版本:

public interface ImageDataProvider {
  public ImageData getImageData (int zoom);
}
public interface ImageFileNameProvider {
  public String getImagePath (int zoom);
}
Run Code Online (Sandbox Code Playgroud)

根据用户的显示器配置,SWT 将请求具有相应缩放级别的图像。下面的示例显示 3 个原始图像,后跟其分辨率根据显示器分辨率而变化的变体:Snippet367.j​​ava

请注意,这只是在 SWT 和基于 Eclipse 的应用程序中支持高分辨率图像的第一步。在平台中采用新 API 的工作正在进行中。此外,需要在 SWT 中进行更多工作才能正确支持通过 GC 绘制高分辨率图像。

高 DPI 监视器支持的 API
http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2FwhatsNew%2Fplatform_isv_whatsnew.html