2017-02-01 9 views
0

В настоящее время я делаю несколько тестов, чтобы проверить, правильно ли работает приложение Retina Mac. Я установил Quartz Debug для этой цели, и теперь я запускаю масштабированный режим. Мой экранный режим теперь 960x540, но, конечно, физический размер монитора по-прежнему остается Full HD, то есть 1920x1080 пикселей.Есть ли способ найти коэффициент масштабирования для CGDisplay?

При запросе базы данных монитора с использованием CGGetActiveDisplayList(), а затем используя CGDisplayBounds() на отдельных мониторах в списке, размер возвращаемого монитора составляет 960x540. Это то, что я ожидал, потому что CGDisplayBounds(), как говорят, использует глобальное пространство координат дисплея, а не пиксели.

К моему удивлению, однако, CGDisplayPixelsWide() и CGDisplayPixelsHigh() также возвращают 960x540, хотя они явно говорят, что возвращают пиксели, поэтому я ожидаю, что они вернут 1920x1080 вместо этого. Но они этого не делают.

Это оставляет мне интересно, как я могу получить реальное физическое разрешение монитора вместо масштабированного режима с использованием API CGDisplay, то есть 1920x1080 вместо 960x540 в моем случае? Есть ли способ получить коэффициент масштабирования для CGDisplay, чтобы я мог самостоятельно вычислить реальное физическое разрешение?

Я знаю, что могу получить этот коэффициент масштабирования, используя метод backingScaleFactor, но это возможно только для NSScreen, как я могу получить коэффициент масштабирования для CGDisplay?

ответ

1

Вам необходимо изучить режим дисплея, а не только сам дисплей. Используйте CGDisplayCopyDisplayMode(), а затем CGDisplayModeGetPixelWidth() и CGDisplayModeGetPixelHeight(). Эти последние два являются относительно более новыми функциями, и документация в основном существует в заголовках.

И, конечно же, не забудьте до CGDisplayModeRelease() объект режима.

+0

Ниже приведено описание, связанное с этим вопросом: http://stackoverflow.com/q/42024942/1197719 – Andreas