【发布时间】:2016-07-30 11:12:56
【问题描述】:
我发现了一个 Swing 图像渲染错误,它只影响带有 Retina 显示器的 Mac(TYPE_INT_ARGB_PREBufferedImages 无法绘制)。我有一个有效的解决方法(改用TYPE_INT_ARGB 图像),但为了应用它,我需要能够检测主机是否是带有 Retina 显示屏的 Mac。检测机器是不是Mac没问题,但是怎么判断显示类型呢?
【问题讨论】:
我发现了一个 Swing 图像渲染错误,它只影响带有 Retina 显示器的 Mac(TYPE_INT_ARGB_PREBufferedImages 无法绘制)。我有一个有效的解决方法(改用TYPE_INT_ARGB 图像),但为了应用它,我需要能够检测主机是否是带有 Retina 显示屏的 Mac。检测机器是不是Mac没问题,但是怎么判断显示类型呢?
【问题讨论】:
Toolkit.getDefaultToolkit().getDesktopProperty("apple.awt.contentScaleFactor")
上面的行应该在 Retina 显示器上返回 2.0。在最近的非视网膜 Mac 上,它返回 1.0,而在所有其他平台上,你返回 null。我找不到任何官方文档,但我在尝试解决类似问题时遇到了in this mailing list post。
【讨论】:
我发现this 解决方案使用:
Graphics2D g = (Graphics2D) this.getGraphics ();
boolean retinaTest = g.getFontRenderContext ().getTransform ()
.equals (AffineTransform.getScaleInstance (2.0, 2.0));
【讨论】: