java 进行自定义的「双缓冲」绘图出现模糊或锯齿 - JJpl
2023-12-03 本文已影响0人
生信石头
根本原因:高清屏幕的普及。
目前绝大多数人已经使用3K,4K屏幕。由于分辨率较高,许多程序按原有比例显示时会显得比较小。于是windows从系统层级提供了调整方法。
这会带来好处,许多应用支持自动scale up,于是显示的又清晰有好看,但也有一些并没有跟得上。简单来说,Java 8 或者之前的 Java 版本是不支持高清屏的,所以无法scale。Java 9或者以上是支持的,所以可以。
但事实上,对于Java来说,swing 中进行 BufferedImage 绘制,然后再 drawImage 到 JPanel 上,就会发现,尽管程序整体界面已经scale up得很好了。drawImage 出来的 BufferedImage 就会模糊。取消掉Window全局的 scale up,图像会显示得比较小,当然这是支持放大的,同时也解决了问题,图片不会再模糊。
总而言之,目前没找到非常合适的方法,可以做好自定义的双缓冲,同时不影响drawImage 出来的 BufferedImage画质(在系统层级scale up的情况下)。
如果是良好显示:
如果是非正常显示:
尝试放大再缩小,似乎也没什么用处....不过也可能是还是不够理解 Java Graphics2D 和 Image 的操作吧。
以后再说,2023年12月04日。
====
2023年12月04日,经过测试,还是找到大体方法:
- 首先是获取操作系统scale up得比如,如 200%;
- 绘图前进行画布放大,随后 graphics scale up,直接绘制
- 随后 drawImage 的时候,让按照原图尺寸绘制,如此就会 scale down,清晰度就一切OK。