Понимание точек и пространства пользователя в Какао Рисование, как они взаимодействуют с разрешением экрана
Размеры чертежей какао (ширина и высота) указываются в точках, которые определяются следующим образом в документации OS X Cocoa Drawing Guide:
"Одна точка эквивалентна 1/72 дюйма"
Из этого я понимаю, что точка - это физическое расстояние. Поэтому, если мой экран имеет ширину 20 дюймов (например), у меня будет 20 x 72 = 1440 точек горизонтальной ширины в точках для работы. Другими словами, точка не зависит от разрешения устройства.
Это не так...
Простое приложение какао, использующее ширину окна в качестве теста, показывает, что: 1) когда мое разрешение установлено на 1680x1050, потребуется ширина 1680 точек, чтобы охватить ширину экрана 2) аналогично, если я изменю свое разрешение на 2560x1440, оно будет взять ширину окна 2560 точек, чтобы охватить ширину экрана
Также сбивает с толку (противоречиво) заявление, сделанное в Руководстве Apple по высокому разрешению, которое:
Каждая точка в пространстве пользователя поддерживается четырьмя пикселями
Вышеуказанные тесты показывают, что у меня есть пользовательское пространство 1680x1050, когда мое разрешение экрана установлено на 1680x1050. Если на пользовательскую точку приходится 4 пикселя, то это будет означать эффективное "реальное" разрешение в 2 раза (1680x1050) = 3360x2100, что больше, чем родное разрешение моего 13-дюймового MacBook Pro Retina 2560x1600.
1 ответ
Точки - это абстрактная виртуальная система координат. Намерение состоит в том, что вы обычно проектируете и пишете код для рисования для работы в точках, и это будет примерно соответствовать человеческому зрению, компенсируя различные физические плотности пикселей дисплея и обычное расстояние между дисплеем и глазами пользователя.
Точки не имеют надежного отношения ни к физическим единицам расстояния (дюймы, сантиметры и т. Д.), Ни к физическим пикселям дисплея.
Для экранов существует как минимум три разных измерения. Например, экран Retina MacBook Pro имеет 2880x1800 физических пикселей. В режиме по умолчанию это соответствует 1440x900 точек, поэтому каждая точка представляет собой квадрат 2x2 пикселя. Вот почему окно в такой системе имеет такой же визуальный размер, как и окно на MacBook Pro без Retina, с экраном с 1440x900 физическими пикселями, сопоставленными с 1440x900 точками. Окно измеряется в точках и поэтому занимает ту же часть экрана недвижимости. Тем не менее, на дисплее Retina больше пикселей, позволяющих получить более четкие детали.
Однако возможен еще один уровень сложности. Вы можете настроить эту систему Retina для отображения большего количества контента на экране за счет некоторых деталей. Вы можете выбрать режим отображения 1920x1200 точек. В этом режиме рендеринг выполняется в буфер размером 3840х2400 пикселей. Это позволяет выполнять рендеринг на более высоком уровне детализации, но сохраняет математику простой; точки все еще отображаются в квадраты 2x2 пикселей. (Эта простая математика также позволяет избежать проблем со швами при рисовании прилегающих растровых изображений.) Но 3840x2400 больше, чем количество физических пикселей в оборудовании дисплея. Таким образом, этот буферный буфер уменьшается при отображении на экране до физических 2880x1800 пикселей. Это приводит к потере части более высокой детализации из буфера, но результаты по-прежнему более детализированы, чем физический экран 1920x1200 или масштабирование рендеринга 1920x1200 до физического экрана 2880x1800.
Итак, для этой конфигурации:
Размер экрана в точках: 1920x1200
Backbuffer в пикселях в памяти: 3840x2400
Физические пиксели в оборудовании дисплея: 2880x1800
Конечно, возможны и другие конфигурации:
Размер экрана в пунктах: 2880x1800
Backbuffer в пикселях: 2880x1800
Физические пиксели: 2880x1800
Все будет крошечным, но вы сможете разместить на экране много вещей (например, много строк текста).
Размер экрана в пунктах: 1280х800
Backbuffer в пикселях: 2560x1600
Физические пиксели: 2880x1800
Это на самом деле сделает все (текст, кнопки и т. Д.) Больше, так как существует меньше точек, сопоставленных с одинаковыми физическими пикселями. Каждая точка будет физически больше. Обратите внимание, что каждая точка по-прежнему отображается в квадрат 2x2 пикселя в буферном буфере. Как и прежде, аппаратный буферный буфер масштабируется до физического дисплея. На этот раз он немного увеличен, а не вниз. (Это масштабирование аналогично тому, что происходит на ЖК-дисплее без Retina, когда вы выбираете режим с меньшим количеством пикселей, чем у физического дисплея. Очевидно, что ЖК-дисплей не может изменить количество физических пикселей, которые он имеет, поэтому другое разрешение достигается путем масштабирования Backbuffer.)
И т.п.