2015-03-02 5 views
2

Как я могу с уверенностью узнать, работает ли моя программа JavaFX на устройстве сетчатки и какое соотношение масштаба пикселей используется. Вызов чего-то вродеКак узнать, работает ли моя программа на экране Retina

System.out.println(Screen.getPrimary().getDpi()); 

просто возвращает 110 на мой Mac. Это ровно половина фактического физического dpis, поэтому информация, предоставляемая классом Screen, совершенно бесполезна.

Есть ли другой способ узнать, что я ищу?

Майкл

+0

Какую версию java вы используете? – Inge

+0

Я использую JDK8u31 – mipa

+0

А, ну, может быть, вы найдете некоторые подсказки в этом [ответе] (http://stackoverflow.com/questions/26182460/javafx-8-hidpi-support) – Inge

ответ

2

Я думаю, что теперь я могу ответить на мой собственный вопрос. Официально, похоже, нет никакого способа узнать, что такое физические DPI вашего экрана. Единственный способ, как представляется, использовать некоторые частные API, как в следующем примере:

import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 
import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 

public class PixelScaleTest extends Application { 

    public static double getPixelScale(Screen screen) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 
     Method m = Screen.class.getDeclaredMethod("getScale"); 
     m.setAccessible(true); 
     return ((Float) m.invoke(screen)).doubleValue(); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     try { 
      System.out.println("PixelScale: " + getPixelScale(Screen.getPrimary())); 
     } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException 
       | SecurityException e) { 
      e.printStackTrace(); 
     } 
     Platform.exit(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 

С помощью коэффициента пикселей масштаба вы можете вычислить ваше физическое ПИ. На стандартном экране этот коэффициент должен быть 1,0, а на Mac Retina - 2,0.

 Смежные вопросы

  • Нет связанных вопросов^_^