Понимание точек и пользовательского пространства в Cocoa Drawing при их взаимодействии с разрешением экрана

Размеры чертежа какао (ширина и высота) указаны в точках, которые определены следующим образом в документации OS X Cocoa Drawing Guide:

«Одна точка эквивалентна 1/72 дюйма»

Отсюда я понимаю, что точка — это физическое расстояние. Итак, если мой экран имеет ширину 20 дюймов (например), у меня будет 20 x 72 = 1440 точек ширины по горизонтали в points для работы. Другими словами, точка не зависит от разрешения устройства.

Это вроде не так...

Простое приложение какао, использующее ширину окна в качестве теста, показывает, что: 1) когда мое разрешение установлено на 1680x1050, для охвата ширины экрана потребуется ширина 1680 точек 2) аналогично, если я измените мое разрешение на 2560x1440, для ширины экрана потребуется ширина окна 2560 точек

Также сбивает с толку (противоречивым образом) утверждение, сделанное в документе Apple «Рекомендации по высокому разрешению» о том, что:

Каждая точка в пользовательском пространстве поддерживается четырьмя пикселями.

Приведенные выше тесты показывают, что у меня есть пользовательское пространство 1680x1050, когда разрешение экрана установлено на 1680x1050. Если на точку пользователя приходится 4 пикселя, то это будет указывать на эффективное «реальное» разрешение в 2 раза (1680x1050) = 3360x2100, что больше, чем исходное разрешение моего 13-дюймового MacBook Pro Retina 2560x1600.


person Sam    schedule 18.01.2015    source источник
comment
Я думаю, что 72 точки на дюйм в основном относятся к контекстам PDF и печати по умолчанию, есть небольшой диапазон с точки зрения физических экранов, рассмотрим iPad и iPad mini, которые во время выполнения выглядят одинаково. Я понимаю, что вы пометили какао, а не какао-тач, но там то же самое, тем более, что многие Mac используют экраны, которые Apple даже не производила.   -  person Jef    schedule 18.01.2015
comment
@Jef, так что же такое определение точки?   -  person Sam    schedule 18.01.2015
comment
на практике это абстрактная единица, которая не имеет фиксированной корреляции ни с пикселями, ни с какими-либо физическими измерениями. это тоже материал, которым кварц рисует :)   -  person Jef    schedule 18.01.2015
comment
В моих тестах выше кажется, что рабочим определением может быть: одна единица по вертикали или по горизонтали при любом разрешении экрана. Я пытаюсь разобраться, так ли это на самом деле.   -  person Sam    schedule 18.01.2015
comment
звучит хорошо для меня, да. Я уверен, что 72 dpi — это хорошая цифра «приблизительного значения», но есть диапазон, который (на экранах) не является явным значением. Но когда они выпускают экран со значительно большим количеством пикселей, чем раньше, они увеличивают «масштаб», чтобы сохранить «точки» в этом диапазоне... (вместо того, чтобы выпускать новый экран с вдвое большим количеством «точек» для рисования, что будет отображать много вещей в существующих приложениях (например, минимальный, максимальный размер в каждом NSWindow) неоптимально.   -  person Jef    schedule 18.01.2015


Ответы (1)


Точки — это абстрактная виртуальная система координат. Цель состоит в том, чтобы вы обычно проектировали и писали код рисования для работы в точках, который будет примерно соответствовать человеческому зрению, компенсируя различную плотность пикселей физического дисплея и обычное расстояние между дисплеем и глазами пользователя.

Точки не имеют надежной связи ни с физическими единицами расстояния (дюймы, сантиметры и т. д.), ни с физическими пикселями дисплея.

Для экранных дисплеев существует как минимум три различных измерения. Например, экран Retina MacBook Pro имеет физические размеры 2880x1800 пикселей. В режиме по умолчанию это отображается на 1440x900 точек, поэтому каждая точка представляет собой квадрат 2x2 пикселя. Вот почему окно в такой системе имеет тот же визуальный размер, что и такое же окно на MacBook Pro без Retina с экраном с физическими пикселями 1440x900, сопоставленными с 1440x900 точками. Окно измеряется в точках и поэтому занимает ту же часть площади экрана. Однако на дисплее Retina больше пикселей, что позволяет отображать более мелкие детали.

Однако возможен еще один уровень сложности. Вы можете настроить эту систему Retina для отображения большего количества контента на экране за счет некоторых деталей. Вы можете выбрать режим отображения 1920x1200 точек. В этом режиме рендеринг выполняется в буфер размером 3840x2400 пикселей. Это позволяет выполнять рендеринг с более высоким уровнем детализации, но сохраняет простоту математики; точки по-прежнему отображаются на квадраты размером 2x2 пикселя. (Эта простая математика также позволяет избежать проблем со швами при рисовании граничащих растровых изображений.) Но 3840x2400 больше, чем число физических пикселей в оборудовании дисплея. Таким образом, этот резервный буфер уменьшается при рисовании на экране до физических 2880x1800 пикселей. При этом теряется некоторая высокая детализация из резервного буфера, но результаты по-прежнему более детализированы, чем при физическом экране 1920 x 1200 или масштабировании рендеринга 1920 x 1200 до физического экрана 2880 x 1800.

Итак, для этой конфигурации:
Размер экрана в точках: 1920x1200
Бэкбуфер в пикселях в оперативной памяти: 3840x2400
Физические пиксели в оборудовании дисплея: 2880x1800

Возможны, конечно, и другие конфигурации:

Размер экрана в точках: 2880 x 1800
Обратный буфер в пикселях: 2880 x 1800
Физические пиксели: 2880 x 1800
Все будет крошечным, но вы сможете разместить много материала (например, много строк текста) на экран.

Размер экрана в точках: 1280 x 800
Обратный буфер в пикселях: 2560 x 1600
Физические пиксели: 2880 x 1800
Фактически все (текст, кнопки и т. д.) будет казаться больше, так как меньше точек сопоставляется с одними и теми же физическими пикселями. . Каждая точка будет физически больше. Обратите внимание, однако, что каждая точка по-прежнему отображается в квадрат 2x2 пикселя в заднем буфере. Как и прежде, резервный буфер аппаратно масштабируется до размеров физического дисплея. На этот раз он немного увеличен, а не уменьшен. (Это масштабирование аналогично тому, как это происходит на ЖК-дисплее, отличном от Retina, когда вы выбираете режим с меньшим количеством пикселей, чем на физическом дисплее. Очевидно, что ЖК-дисплей не может изменить количество имеющихся у него физических пикселей, поэтому другое разрешение достигается путем масштабирования заднего буфера.)

И т.п.

person Ken Thomases    schedule 18.01.2015
comment
во-первых спасибо за исчерпывающий ответ. Подводя итог важному пункту/правилу: размер экрана в пунктах всегда будет таким, какое пользователь установил для своего разрешения экрана. Несмотря на это, это разрешение экрана учитывает уравнение сетчатки. - person Sam; 19.01.2015