2013-02-05 16 views
7

Znalazłem błąd renderowania obrazu Swing, który dotyczy tylko komputerów Mac z wyświetlaczami Retina (TYPE_INT_ARGB_PREBufferedImages nie udało się narysować). Mam skuteczne obejście tego problemu (zamiast tego użyj obrazów TYPE_INT_ARGB), ale aby go zastosować, muszę być w stanie wykryć, czy komputer hosta to komputer Mac z ekranem Retina. Wykrywanie, czy komputer jest komputerem Mac, nie jest problemem, ale jak określić typ wyświetlania?Jak mogę wykryć, czy komputer Mac ma wyświetlacz Retina z Java?

Odpowiedz

15

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

Powyższa linia powinna powrócić 2.0 na wyświetlaczach Retina. W nowszych macewach innych niż retina zwraca 1.0 i na wszystkich innych platformach, z których otrzymujesz zwrot null. Nie mogę znaleźć żadnej oficjalnej dokumentacji, ale natknąłem się na nią in this mailing list post próbując rozwiązać podobny problem.

+1

To nie jest dobry sposób, ponieważ użytkownicy mogą mieć wiele monitorów, z których jeden jest Retina i jeden, który nie jest. Musisz zapytać o ten stan dla poszczególnych okien za każdym razem, gdy je odświeżasz. –

+0

Zwraca wartość null w moim ostatnim rMBP z 2013 r. Czy jest jakiś konkretny, który powinien być użyty? – dmolony

1

znalazłem rozwiązanie, które wykorzystuje this:

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