我发现了一个Swing图像渲染错误,只影响具有Retina显示屏的Mac电脑(TYPE_INT_ARGB_PRE
BufferedImages
无法绘制)。我有一个有效的解决方法(使用TYPE_INT_ARGB
图像),但是为了应用它,我需要能够检测主机是否为具有Retina显示器的Mac电脑。检测电脑是否为Mac不是问题,但如何确定显示器类型呢?
Toolkit.getDefaultToolkit().getDesktopProperty("apple.awt.contentScaleFactor")
上述代码应在Retina显示器上返回2.0
。在较新的非Retina Mac上返回1.0
,而在其他所有平台上则返回null
。我无法找到任何官方文档,但在解决类似问题时,我在这个邮件列表帖子中发现了它。
Graphics2D g = (Graphics2D) this.getGraphics ();
boolean retinaTest = g.getFontRenderContext ().getTransform ()
.equals (AffineTransform.getScaleInstance (2.0, 2.0));