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

时间:2015-03-23 13:45:58

标签: java swt

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

在OS X上,高分辨率屏幕处理看起来很简单:虚拟分辨率只是大小的一半,但如何在Windows上进行缩放似乎允许非整数缩放因子?如何检测何时缩放以及何时不缩放?

更新 看起来this SWT issue涵盖了类似的问题。

1 个答案:

答案 0 :(得分:1)

查看enter image description here,里程碑版本包含一些图像自动缩放功能(例如工具栏)。

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

  

SWT现在可以自动在Windows上的高DPI显示器上缩放图像   和Linux一样,类似Mac OS上对OS X的支持。在没有的情况下   对于高分辨率图像,SWT会自动缩放可用图像   确保缩放基于SWT的Eclipse应用程序   与监视器的分辨率成比例。

     

Neon (4.6) M6 - New and Noteworthy

     

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

     

-Dswt.enable.autoScale =假

     

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

     

警告:我们知道一些缩放图像在比例因子上看起来很糟糕   不到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);
}
     

根据用户的显示器配置,SWT将请求图像   具有相应的缩放级别。这是一个显示3的示例   原始图像,然后是分辨率变化的变体   取决于您的显示器的分辨率:enter image description here

     

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

支持高DPI监控的API
Snippet367.java