2013-02-05 43 views
7

我發現一個Swing圖像渲染錯誤,它只能折磨帶Retina顯示器的Mac(TYPE_INT_ARGB_PREBufferedImages未能繪製)。我有一個有效的解決方法(代替使用TYPE_INT_ARGB圖像),但爲了應用它,我需要能夠檢測主機是否是具有Retina顯示器的Mac。檢測機器是否是Mac是沒有問題的,但我怎樣才能確定顯示器類型?如何檢測Mac是否有來自Java的Retina顯示屏?

回答

15

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

上面行應視網膜上顯示返回2.0。在最近的非視網膜蘋果機上,它會返回1.0,並在所有其他平臺上返回null。我找不到任何官方文檔,但我試圖解決類似問題時遇到了in this mailing list post

+1

這不是一個很好的方法,因爲用戶可能具有多個監視器,其中之一是視網膜和一個其不是。每次重新繪製時,您都需要爲單個窗口查詢此狀態。 –

+0

這將在我2013年晚些時候的rMBP上返回null。有沒有特定的地方應該使用? – dmolony

1

我發現this溶液,其使用:

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