Jol*_*nar 33 java swing image hdpi retina
根据这些文章:
http://news.kynosarges.org/2015/06/29/javafx-dpi-scaling-fixed
https://twitter.com/michaelsamarin/status/729234779292483584
Java 9应支持Swing中的高DPI显示(自动DPI缩放).我已经在Zulu 9上的Java 9 Early Access + 的最新版本上测试了它,它看起来非常棒.
我无法解决一件事 - 高分辨率/视网膜图像加载.
根据上面和下面的文章(链接),它应该使用Apple名称约定(@ 2x):
image.png,image@2x.png,image@3x.png,等.
我测试了这些加载方法:
Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("something/image.png"));
Run Code Online (Sandbox Code Playgroud)
和
ImageIO.read(getClass().getResource("/something/image.png"));
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用(唯一的基本图像被加载和模糊).
根据这个:
第一种方法应该是有希望的.
有没有人有这方面的经验(使用Swing甚至JavaFX)?我不确定我是做错了什么,或者这个功能没有实现到当前预发布版本的Java 9 sofar.
更新:
它应该是可能的:
我也试过遵循命名约定(这里描述):
Windows : image.scale-<dpi-value>.png (image.scale-140.png)
Linux : image.java-scale2x.png
Mac : image@2x.png and image.java-scale2x.png
Run Code Online (Sandbox Code Playgroud)
但是,我找不到任何有效的解决方案或官方信息.我不明白 - hdpi显示器今天很常见,Java应用程序看起来就像它们.
作为HiDPI支持的一部分,Java 9通过java.awt.MultiResolutionImage接口和java.awt.image.AbstractMultiResolutionImage等类引入了多分辨率支持。尽管它们在Swing中受支持,但是在此领域中仍然存在错误和误解。
这些在早期的Java版本中不存在,因此,如果您希望用户能够继续在早期的运行时中运行,则在早期的JRE上运行时,必须编写代码以使用常规Image类。
要使用这些功能,您需要执行以下操作:
然后创建并加载MultiResolutionImage:
List<Image> imgList = new ArrayList<Image>();
imgList.add(ImageIO.read(new File("320px-Eagle.jpg"));
imgList.add(ImageIO.read(new File("800px-Eagle.jpg"));
imgList.add(ImageIO.read(new File("1024px-Eagle.jpg"));
imgList.add(ImageIO.read(new File("1280px-Eagle.jpg"));
imgList.add(ImageIO.read(new File("Eagle.jpg"));
MultiResolutionImage mrImage = new BaseMultiResolutionImage(imgList.toArray(new Image[0]));
Run Code Online (Sandbox Code Playgroud)mrImage就像使用其他任何图像一样使用对象。
命名约定没有自动的方法:图像分辨率是从图像文件内容中获取的。
| 归档时间: |
|
| 查看次数: |
2923 次 |
| 最近记录: |