2013-02-05 8 views
7

私は網膜ディスプレイ(TYPE_INT_ARGB_PREBufferedImagesが描くことができません)でMacを苦しめるSwingイメージレンダリングのバグを見つけました。効果的な回避策がありますが(代わりにTYPE_INT_ARGBの画像を使用します)、それを適用するには、ホストマシンがRetinaディスプレイを備えたMacであるかどうかを検出できる必要があります。マシンがMacであるかどうかを検出することは問題ありませんが、どのように表示タイプを決定できますか?MacでRetinaディスプレイがJavaから検出されたかどうかを検出するにはどうすればよいですか?

答えて

15

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

上の行は、網膜ディスプレイ上2.0を返すべきです。より最近の非網膜マックでは1.0を返し、その他のプラットフォームではnullに戻ります。私は公式の文書を見つけることができませんが、同様の問題を解決しようとしている間に私はin this mailing list postを見つけました。

+1

を。再描画するたびに、個々のウィンドウに対してこの状態を照会する必要があります。 –

+0

これは、2013年後半のrMBPでnullを返します。特定の場所に使用する必要がありますか? – dmolony

1

Iは使用this溶液が見つかりました:ユーザーではない網膜およびいずれか一方が複数のモニタを有することができるので、これは良い方法ではない

Graphics2D g = (Graphics2D) this.getGraphics(); 
boolean retinaTest = g.getFontRenderContext().getTransform() 
    .equals (AffineTransform.getScaleInstance (2.0, 2.0)); 
関連する問題