В чем разница между логическим DpiX и физическим DpiX в Qt?

В документации QPaintDevice (из которого получаются все объекты, доступные для рисования, такие как QWidget, QPixmap и т. д.), есть две функции для получения DPI устройства

int logicalDpiX() const;
int physicalDpiX() const;

int logicalDpiY() const;
int logicalDpiX() const;

В документации сказано

Функции logicDpiX() и logicDpiY() возвращают горизонтальное и вертикальное разрешение устройства в точках на дюйм. Функции PhysicalDpiX() и financialDpiY() также возвращают разрешение устройства в точках на дюйм, но учтите, что если логическое и физическое разрешение различаются, соответствующий QPaintEngine должен обрабатывать отображение. Наконец, функция colorCount() возвращает количество различных цветов, доступных для устройства рисования.

Несмотря на это описание, я до сих пор не понимаю, какова цель этого различия. Может кто-нибудь, пожалуйста, пролить свет на это?

2 ответа

Я предполагаю, что физическое - это фактическое разрешение устройства, а логическое - то, что пользователь установил в настройках ОС. Это популярно у сетчатки или других дисплеев с высоким разрешением, где использование физических точек для пикселей приведет к тому, что все будет слишком маленьким.

Я нашел эту конкретную информацию Windows: http://msdn.microsoft.com/en-us/library/windows/apps/ff684173

Поскольку фактические размеры пикселей различаются, текст, который можно прочитать на одном мониторе, может быть слишком маленьким на другом мониторе. Кроме того, у людей разные предпочтения - некоторые люди предпочитают более крупный текст. По этой причине Windows позволяет пользователю изменять настройку DPI. Например, если пользователь устанавливает для дисплея значение 144 DPI, 72-точечный шрифт имеет высоту 144 пикселя. Стандартные настройки DPI: 100% (96 DPI), 125% (120 DPI) и 150% (144 DPI). Пользователь также может применить пользовательские настройки. Начиная с Windows 7, DPI - это настройка для каждого пользователя.

Еще лучше: QT docs:

Примечание о логических и физических точках на дюйм: физическое DPI основано на фактических физических размерах пикселей, когда доступно, и полезно для предварительного просмотра печати и в других случаях, когда желательно знать точные физические размеры отображаемого на экране содержимого. Логические точки на дюйм используются для преобразования шрифта и элементов пользовательского интерфейса из размеров точек в размеры в пикселях и могут отличаться от физических точек на дюйм. Логические точки на дюйм иногда устанавливаются пользователем на панели настроек среды рабочего стола, чтобы пользователь мог глобально контролировать пользовательский интерфейс и размеры шрифтов в различных приложениях.

Я не уверен на 100%, но я думаю, что физическое разрешение - это фактическое разрешение холста, на котором вы рисуете. Логическое разрешение - это разрешение, которое вы используете в своей программе. Например, для обработки разных экранов вы можете сказать, что для любого физического разрешения дисплея (холста) я буду работать с логическим разрешением 100 на 100 пикселей и использовать, например, фиксированный макет. Масштабирование будет выполняться художником автоматически с использованием физического разрешения.

OpenGL работает таким образом, например. Сначала он преобразует все координаты (используя модель, вид, матрицы проекций) в куб диапазона [-1, 1], выполняет вычисления в этих координатах, а затем отображает их в фактический буфер цвета

Другие вопросы по тегам