如何从Java中检测Mac是否具有Retina显示屏?

7

我发现了一个Swing图像渲染错误,只影响具有Retina显示屏的Mac电脑(TYPE_INT_ARGB_PRE BufferedImages无法绘制)。我有一个有效的解决方法(使用TYPE_INT_ARGB图像),但是为了应用它,我需要能够检测主机是否为具有Retina显示器的Mac电脑。检测电脑是否为Mac不是问题,但如何确定显示器类型呢?

2个回答

15

Toolkit.getDefaultToolkit().getDesktopProperty("apple.awt.contentScaleFactor")

上述代码应在Retina显示器上返回2.0。在较新的非Retina Mac上返回1.0,而在其他所有平台上则返回null。我无法找到任何官方文档,但在解决类似问题时,我在这个邮件列表帖子中发现了它。


1
这不是一个好的方法,因为用户可能有多个显示器,其中一个是Retina,而另一个不是。你需要每次重绘时查询每个窗口的状态。 - Steve McLeod
这个在我2013年末的rMBP上返回 null。它应该在特定位置使用吗? - dmolony

1
我发现了一个使用以下代码的this解决方案:
Graphics2D g = (Graphics2D) this.getGraphics ();
boolean retinaTest = g.getFontRenderContext ().getTransform ()
    .equals (AffineTransform.getScaleInstance (2.0, 2.0));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接