2016-11-03 8 views
2

일부 저급 렌더링 작업을 수행 할 예정이지만 정확한 크기의 모든 것을 만들기 위해 실제 디스플레이 DPI를 알아야합니다.자바 코드에서 실제 디스플레이 밀도 (DPI)를 찾는 방법은 무엇입니까?

이렇게하려면 한 가지 방법을 찾았습니다 : java.awt.Toolkit.getDefaultToolkit().getScreenResolution() - 그러나 "retina"디스플레이로 OS X에서 잘못된 결과를 반환합니다. 실제 DPI의 1/2입니다. (제 경우에는 220이어야하지만 110입니다.)

그래서 더 정확한 API를 사용할 수 있어야합니다. 또는 OS X 용 해킹을 구현해야합니다. 현재 디스플레이가 " 망막". 그러나 나는이 정보에 대해서도 질의하는 방법을 찾을 수 없었다. this answer가 있지만 내 컴퓨터에 Toolkit.getDefaultToolkit().getDesktopProperty("apple.awt.contentScaleFactor")이 null을 반환합니다.

어떻게하면됩니까?

답변

2

현재 java.awt.GraphicsEnvironment에서 가져올 수있는 것 같습니다. 최신 JDK (8u112)에서 작동하는 코드 예제가 있습니다.

// find the display device of interest 
final GraphicsDevice defaultScreenDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 

// on OS X, it would be CGraphicsDevice 
if (defaultScreenDevice instanceof CGraphicsDevice) { 
    final CGraphicsDevice device = (CGraphicsDevice) defaultScreenDevice; 

    // this is the missing correction factor, it's equal to 2 on HiDPI a.k.a. Retina displays 
    final int scaleFactor = device.getScaleFactor(); 

    // now we can compute the real DPI of the screen 
    final double realDPI = scaleFactor * (device.getXResolution() + device.getYResolution())/2; 
}