Как отобразить каждый пиксель растровой текстуры на каждый физический пиксель экрана в macOS? - PullRequest
0 голосов
/ 30 ноября 2018

Поскольку современные устройства macOS по умолчанию используют масштабированное разрешение HiDPI, растровые изображения размываются на экране.Есть ли способ визуализировать растровое изображение пиксель за пикселем в настоящие физические пиксели экрана дисплея?Любой CoreGraphics, OpenGL или металлический API, который позволил бы это без изменения режима отображения экрана?

Если вы думаете об этих convertXXXXToBacking и друзьях, остановитесь.Вот объяснение для вас.Типичный 13 в MacBook Pro теперь имеет собственное разрешение 2560x1600 пикселей.Рекомендуемое разрешение экрана по умолчанию - 1440x900 после новой установки MacOS.Пользователь может изменить его на 1680x1050 через Системные настройки.В случае 1440x900 или 1680x1050 backingScaleFactor равен ровно 2. Типичный маршрут рендеринга будет сначала отображать что-либо с нефизическим разрешением 2880x1800 или 3360x2100, а OS / GPU выполнит окончательную повторную выборку неизвестным методом.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Ваш лучший выбор, вероятно, металл.MTKView 's drawableSize утверждает, что по умолчанию используется размер представления "в собственных пикселях".Я не уверен, означает ли это пиксели устройства или резервные пиксели магазина.Если последнее, вы можете отключить autoResizeDrawable и установить drawableSize напрямую.

Чтобы получить физическое количество пикселей дисплея, вы можете использовать мой ответ здесь .

Вы также можете попробовать использовать Core Graphics с CGImage такого размера, нарисованным в прямоугольнике размера экрана в пикселях резервного хранилища.Возможно, что все масштабирование будет внутренне отменено.

0 голосов
/ 30 ноября 2018

Если это изображения ресурсов, используйте каталоги ресурсов для предоставления версий изображений, значков и т. Д. С разрешением x2 и x3. Классы, подобные NSImageView, автоматически выберут лучшую версию для разрешения экрана.

Еслиу вас просто есть какое-то случайное изображение, и вы хотите, чтобы оно рисовалось с разрешением экрана, получите backingScaleFactor окна представления.Если это 2.0, то при рисовании изображения размером 200 x 200 пикселей в прямоугольник с координатной точкой 100 x 100 оно будет отображаться с собственным разрешением 1: 1.Точно так же, если масштабный коэффициент равен 3.0, изображение размером 300 x 300 пикселей будет отображаться в прямоугольнике с координатами 100 x 100.

Не удивительно, что у Apple есть обширное руководство по этому вопросу: HighРекомендации по разрешению для OS X

...