根据这些文章:
http://news.kynosarges.org/2015/06/29/javafx-dpi-scaling-fixed
https://twitter.com/michaelsamarin/status/729234779292483584
Java 9应支持Swing在高DPI显示器上的自动DPI缩放。我已经在最新版本的 Java 9 Early Access 和 Zulu 9 上测试过它,而且效果非常好。
我只无法解决一个问题 - 高分辨率/Retina图像的加载。
根据上面和下面的文章(链接),它应该使用苹果的命名约定 ( @2x ):
image.png
, image@2x.png
, image@3x.png
等。
我测试了以下加载方法:
Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("something/image.png"));
和
ImageIO.read(getClass().getResource("/something/image.png"));
但这些方法都不起作用(只有基础图像被加载和模糊了)。
根据这个:
第一种方法应该是有希望的。
有人对此有任何经验吗(使用Swing或甚至JavaFX)?我不确定我是否做错了什么,还是这个特性还没有实现到当前预发布版的Java 9中。
更新:
应该是可能的:
我也尝试遵循以下命名约定(在这里描述):
Windows : image.scale-<dpi-value>.png (image.scale-140.png)
Linux : image.java-scale2x.png
Mac : image@2x.png and image.java-scale2x.png
然而,我找不到任何有效的解决方案或官方信息。我不明白 - 高分辨率显示器今天很常见,而Java应用程序在这些显示器上看起来模糊不清。
url
引用时工作,而不是在以通用方式加载图像时使用编程 API。 - Oleg Estekhin