【问题标题】:How can I detect whether a Mac has a Retina display from Java?如何检测 Mac 是否具有来自 Java 的 Retina 显示屏?
【发布时间】:2016-07-30 11:12:56
【问题描述】:

我发现了一个 Swing 图像渲染错误,它只影响带有 Retina 显示器的 Mac(TYPE_INT_ARGB_PREBufferedImages 无法绘制)。我有一个有效的解决方法(改用TYPE_INT_ARGB 图像),但为了应用它,我需要能够检测主机是否是带有 Retina 显示屏的 Mac。检测机器是不是Mac没问题,但是怎么判断显示类型呢?

【问题讨论】:

    标签: java macos


    【解决方案1】:

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

    上面的行应该在 Retina 显示器上返回 2.0。在最近的非视网膜 Mac 上,它返回 1.0,而在所有其他平台上,你返回 null。我找不到任何官方文档,但我在尝试解决类似问题时遇到了in this mailing list post

    【讨论】:

    • 这不是一个好方法,因为用户可能有多个显示器,其中一个是 Retina,一个不是。每次重绘时,您都需要查询各个窗口的此状态。
    • 这在我 2013 年末的 rMBP 上返回 null。有什么特定的地方应该使用它吗?
    【解决方案2】:

    我发现this 解决方案使用:

    Graphics2D g = (Graphics2D) this.getGraphics ();
    boolean retinaTest = g.getFontRenderContext ().getTransform ()
        .equals (AffineTransform.getScaleInstance (2.0, 2.0));
    

    【讨论】:

      猜你喜欢
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 2012-10-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多