Извечный вопрос: что такое DPI?
Что такое DPI? Не все знают ответ на этот вопрос. И данная статья поможет.
DPI (Dots Per Inch) – количество точек на дюйм. Оно применяется для определения разрешающей способности экрана. Но некоторые путают DPI монитора с PPI (Pixels Per Inch). Последнее обозначает количество пикселей на дюйм.
Для примера: для квадрата в один дюйм необходимо вывести на экран монитора с разрешающей способностью 96 dpi картинку, где каждая сторона будет содержать 96 пикселей; для печати на бумаге необходимы 600 пикселей на сторону, когда разрешение DPI 600.
Для сравнения: говорят о большом разрешении фотографий (например 3000х1500, где ширина изображения в пикселях 3000, а высота — 1500). Извлечь из этого можно то, что картинка достаточно большая при просмотре на экране. А что будет, если вывести ее на печать? Для этого и существует термин DPI, который определяет количество точек, которые нанесет принтер на дюйм бумаги.
Историческая ремарка: DPI монитора
Старенькие VGA мониторы начала 80-ых имели разрешение DPI от 70 до 74, когда аналогичные продукты Apple (мониторы Macintosh) имели разрешающую способность в 72 DPI, в которых один пиксель соответствовал реальному типографическому показателю в 1/72 дюйма.
Исследования показали, что расстояние человеческого глаза до экрана монитора в три раза больше, чем расстояние до бумажного носителя (газета, книга), тем самым изображение на мониторе заметно меньше. Для комфортной работы и соответствия действительным размерам изображения было принято решение программно устанавливать разрешающую способность в 96 DPI. Но в действительности разрешающая способность мониторов была 70 — 74 DPI.
Только позже компания IBM выпустила монитор с разрешением 96 DPI. Сразу после этого была сделана программная поддержка в 120 DPI. Это свело на нет привязку к действительному типографическому показателю в 72 DPI.
Что такое DPI: изменение разрешающей способности монитора
Прежде всего, изменение DPI влияет на правильное отображение элементов и рисунков на экране, это не способ увеличить или уменьшить размер шрифтов и иконок. Если текст на экране с правильным разрешением выглядит мелковато, то стоит поменять его размер, а не лезть в настройки разрешающей способности монитора.
Другая особенность, даже опасность, неправильного параметра DPI скрыта в визуальном отличии в размерах экранного изображения и результатов печати. В сфере программного обеспечения и разработок ПО неправильно выставленное значение DPI может привести к нечитаемости интерфейса или текста: слишком большой показатель (большие элементы интерфейса) вынудит разработчика уменьшить рабочую область (текст), что неприемлемо на экранах с правильно выставленным DPI.
Есть несколько рекомендаций для разработчиков и любителей кастомного ПО. Лучше создавать программы или презентации по шаблонам, что исключит несоответствие показателей DPI. Любой такой интерфейс будет правильно отображаться на любых мониторах с различной разрешающей способностью. При использовании растрового изображения стоит подготовить два рисунка с различным показателем DPI (96 и 120). И при разном разрешении монитора картинка будет выбираться соответствующая.
Что такое DPI: вывод
Современный пользовательский интерфейс программ и операционных систем ориентирован на разрешающую способность монитора как в 96 DPI, так и 120, что является большим плюсом. Но некоторые драйвера видеокарт и монитора позволяют выставлять персональные значения текста, диалоговых окон и прочей мелочи, что приведет к неправильному отображению картинки.
Для полноты картины еще раз объясним, что такое DPI на простом примере. Физические размеры монитора остаются неизменными при любом раскладе, а при изменении разрешения с 1024х768 на 1280х1024 меняется и DPI. Визуально уменьшается экран и появляется много свободного места, но все элементы рабочего стола и шрифт остались прежними. Сами пиксели уменьшились, чтобы уместиться на той же площади экрана, при том же размере.
fb.ru
Как найти и изменить DPI монитора в Ubuntu.
Для того чтобы установить правильный параметр DPI для монитора — нужно сделать 2 действия.
1. Вычислить оптимальный DPI для текущего разрешения.
2. Установить его.
Вот пример.
Я использую Ubuntu 12.04 с Gnome Classic. Разрешение моего монитора 1680×1050.
Проверить текущие настройки можно так:
xdpyinfo | grep dots
ответ: 96×96 точек, еще так:
xrdb -query | grep dpi
ответ: Xft.dpi: 96
, или еще так:
cat /var/log/Xorg.0.log | grep DPI
ответ такой: NOUVEAU(0): DPI set to (90, 88)
.
1. Посчитаем оптимальный DPI для моего монитора. Актуальный размер экрана в сантиметрах можно найти так:
xrandr | grep -w connected
В моем случае: X = 47.4cm ; Y = 29.6cm
.
Разделив их на 2.54 получаем размер в дюймах: X ~ 18.66in ; Y ~ 11.65in
. Теперь разделим актуальное количество точек на размер в дюймах: X = 1680/18.66 ~ 90dpi ; Y = 1050/11.65 ~ 90dpi
. Получается, текущий DPI примерно равен 90. Давайте исправим это.
2. От имени суперпользователя подредактируем файл (я в gedit):
sudo gedit /etc/lightdm/lightdm.conf
добавим в секции [SeatDefaults]
параметр:
xserver-command=X -dpi 90
Затем необходимо перезагрузить компьютер или Х-сервер.
xdpyinfo | grep dots
возвращает правильный для моего разрешения DPI: 90×90 точек, и
cat /var/log/Xorg.0.log | grep DPI
также отобразит правильный результат.
Альтернативный вариант, который не зависит от lightdm:
создайте где-нибудь файл 77set_dpi
(например в домашнем каталоге) и запишите туда строку:
xrandr --dpi 90x90
Затем выполните:
sudo mv ~/77set_dpi /etc/X11/Xsession.d/
и перезагрузите компьютер.
Результат должен быть такой же, как от действий, описанных выше.
В GNOME3 настройка DPI прописана в коде и равна 96 и не может быть изменена, но есть специальный коэффициент, задав который можно добиться желаемого.
Сначала считаем оптимальный DPI для нашего разрешения способом, описанным выше. И затем считаем коэффициент по формуле:
оптимальный_DPI / 96 (в моем случае: 90/96 = 0.9375)
Затем выполняем команду в терминале (или используем dconf, если умеем):
gsettings set org.gnome.desktop.interface text-scaling-factor 0.9375
Изменения применятся сразу же xrdb также обновится на лету.
xrdb -query | grep dpi
ответит желаемые Xft.dpi: 90
.
Теперь DPI установлен оптимально для этого разрешения монитора.
Источник.
DPI, монитор, экран
usefree.com.ua
Двойные мониторы в Windows – Как установить другой размер DPI или текста на каждом мониторе?
Примечание. Windows 8.1, вопреки утверждениям Microsoft, действительно не поддерживает запуск нескольких DPI на отдельных мониторах.
У меня есть ноутбук с окнами 8.1 и 3840×2160 16-дюймовым экраном. Для того, чтобы диалоговые окна, окна и т. Д. Были пригодны для использования, он должен работать со скоростью 200% (сопоставимая недвижимость с типичным 16-дюймовым дисплеем 1080p, но с элементами пользовательского интерфейса, Текст и фотографии, сделанные более резкими).
Когда приложения перемещаются из монитора ноутбука на внешний монитор, как только больше половины окна перетаскивается, окно изменяется. Проблема заключается в том, что строки меню, курсор и т. Д. Не изначально перерисовываются в новой настройке DPI, все окно приложения, панели инструментов и все рисуются при 200DPI, а затем растровое изображение изменено до 50%, чтобы поместиться на внешний монитор. Только 200% DPI-шкала используется одновременно, тогда как другие DPI для внешних мониторов [слабо] виртуализированы. Используется очень размытое билинейное масштабирование, и текст полностью нечитабелен на внешнем мониторе. Это означает, что преимущества таких вещей, как текст cleartype (который опирается на рендеринг пикселов 1: 1 и фактически использует субпиксельное сглаживание), не достижимы при использовании смешанных DPI.
Несколько избранных приложений (IE, powerpoint) перечислены для каждого DPI-монитора. В этом случае содержимое окон перерисовывается в правильном размере, а тип шрифта в приложениях все еще функционирует, но строки меню, строка заголовка, даже курсор все еще нарисованы в масштабе 200%, что делает их необычно большими на внешних мониторах. Я подозреваю, что это исключение было сделано так, чтобы полноэкранные презентации могли быть выполнены без размытого масштабирования растрового изображения. Однако при использовании панелей инструментов размером 200% эти приложения не пригодны ни для чего, кроме полноэкранного режима.
На данный момент нет необходимости перезапускать компьютер для изменения DPI каждый раз, когда вы подключаетесь к внешнему монитору и используете только внешний монитор.
www.bilee.com
Как найти и изменить экран DPI?
Это обновленная версия моего предыдущего ответа, которая была связана с Ubuntu 12.04. В 16.04 (Xenial) требуется 3 шага, чтобы правильно установить DPI вместо 2.
Я объясню на примере системы с Ubuntu 12.04 с Gnome Classic и монитором с разрешением 1680×1050. Мои начальные настройки:
сообщили 96x96 dots
, xrdb -query | grep dpi
сообщили Xft.dpi: 96
, grep DPI /var/log/Xorg.0.log
сообщили о некоторых странных настройках NOUVEAU(0): DPI set to (90, 88)
.
В 16.04 выходы всех этих трех команд были согласованными и равными 96. Хотя такой консенсус лучше, чем беспорядок 12.04, сообщаемое значение является жестко запрограммированным и далеким от реального значения DPI.
Давайте вычислим оптимальный DPI для моего монитора. Фактический размер экрана можно найти с помощью команды
(конвертировать вывод в сантиметры) или с длинной линейкой вручную. В моем случае: X = 47.4cm
; Y = 29.6cm
. Разделите их на 2.54, чтобы получить размер в дюймах: X ~ 18.66in
; Y ~ 11.65in
. Наконец, разделите количество фактических точек (на основе вашего разрешения) на размер в дюймах: X = 1680/18.66 ~ 90dpi
; Y = 1050/11.65 ~ 90dpi
. Таким образом, мой реальный dpi составляет 90.
Предупреждение , ручной метод измерения может быть более точным, чем вывод команды xrandr | grep -w connected
, поскольку более новые версии X-сервера игнорируют размер, указанный EDID, и вычисляют размер, используя разрешение экрана и твердое значение DPI (подробнее здесь ).
Другой способ найти размер монитора — это прочитать его EDID напрямую. Установите пакет
и запустите команду sudo get-edid | parse-edid | grep DisplaySize
в терминале. Его выход даст вам фактический размер вашего монитора в миллиметрах. Если нет — используйте линейку.
Давайте начнем исправление DPI:
1) . В 12.04 запустите gksudo gedit
, откройте /etc/lightdm/lightdm.conf
и добавьте параметр в разделе [SeatDefaults]
:
xserver-command=X -dpi 90
Нет такого файла в 16.04 по умолчанию, поэтому вы должны вручную создать lightdm.conf
и поместить его в /etc/lightdm/lightdm.conf.d/
. Содержимое этого файла одинаково:
[SeatDefaults]
xserver-command=X -dpi 90
Перезагрузите компьютер или перезапустите X. Теперь grep DPI /var/log/Xorg.0.log
отобразит нужную настройку.
2) В моем предыдущем ответе я предложил создать файл в /etc/X11/Xsession.d/
, содержащий строку xrandr --dpi 90
. Это работало в 12.04, но в 16.04 этот параметр не является постоянным. В новых системах мы можем добавить желаемое значение в начало сеанса. Запустите «Запуск приложений», нажмите кнопку «Добавить», назовите его «Fix DPI» и установите команду
в поле. Сохраните изменения и повторно войдите в систему. Теперь xdpyinfo | grep dots
сообщит 90x90 dots
.
Если xdpyinfo
все еще показывает 96, то добавьте тайм-аут перед запуском xrandr
. Измените команду в «Запуск приложений» и измените ее на:
bash -c "sleep 15; xrandr --dpi 90"
Справка
Шаг 2 является необязательным для 12.04, потому что в старых системах шаг 1 фиксирует значения Xorg.0.log
и xdpyinfo
.
3) В GNOME3 параметр DPI жестко закодирован до 96 и не может быть изменен напрямую, но текст можно масштабировать. Вычислите желаемый множитель:
(в моем случае 90/96 = 0.9375
). Теперь запустите команду (или используйте dconf
, если хотите):
gsettings set org.gnome.desktop.interface text-scaling-factor 0.9375
Изменения будут применены сразу. xrdb -query | grep dpi
сообщит о желаемом Xft.dpi: 90
.
PS Существует еще один способ исправить настройку DPI, что намного сложнее и описано в этот . Я тоже попробовал, и результат был таким же (по крайней мере, в 12.04).
Послесловие: Только разработчики Ubuntu могут сказать наверняка, будут ли значения изменены с помощью шагов 1 и amp; 2 действительно имеют значение в современном Ubuntu, или они молча игнорируются. Только шаг 3 производит изменения, которые мгновенно заметны. Те пользователи, которые считают, что некоторые приложения могут по-прежнему полагаться на настройки X-сервера, рекомендуется выполнить все 3 шага, описанные выше. Для остальных шаг 3 достаточно — это единственный способ настройки, принятый в современных дистрибутивах Ubuntu.
ubuntugeeks.com
Как получить доступ к настройкам DPI экрана дисплея через javascript?
Во-первых, чтобы помочь с возможным (и очень часто) путаницы с термином DPI (точек на дюйм):
DPI не является частью «настроек дисплея». Это (неверно) используется в двух разных контекстах:
- Нативные пиксели на дюйм дисплея (или видео). Он определяет, насколько малы пиксели. Вы можете иметь такое же разрешение 1024×768 как на 14-дюймовом экране ноутбука, так и на 17-дюймовом ЖК-мониторе. Первый будет примерно равным 1280/14 = 91 DPI, а последний будет примерно равным 1280/17 = 75 DPI. DPI экрана неизменен; он не может быть изменен с помощью настроек дисплея. More…
- Точки на дюйм, нарисованные на бумаге во время печати. Это число бок о бок точек, которые принтер/копировальный аппарат/факс может отпечатать в дюйме бумаги. Большинство принтеров можно настроить для печати на более низком DPI, просто распечатав каждую точку в виде двух, четырех и т. Д. Точек. More…
При печати изображения, есть много вещей, которые влияют на конечные размеры изображения на бумаге:
- размеры исходного изображения — это количество пикселей или данных там является.
- DPI исходного изображения. Это значение определяет, как измерения должны интерпретироваться при печати изображения.
- Если исходное изображение не имеет встроенной информации DPI (в формате JPEG может быть один, GIF никогда не будет), программа, которая используется, может иметь настройки для указания DPI. Это может быть просмотрщик/редактор изображений или даже веб-браузер.
- Коэффициент масштабирования, который обычно указывается в диалоговом окне печати.
- Текущая настройка DPI принтера.
- Физический (максимальный) DPI принтера.
Суть в том, что изображение, которое вы печатаете, будет эффективно получать повторно (уменьшено или увеличено) в соответствии с окончательным DPI, используемым в процессе печати. Любая из сторон может вызвать это (программа, драйвер печати, принтер).
Теперь, возвращаясь к вашему вопросу. Нет, вы не можете определить DPI экрана, потому что это не в области программного обеспечения. Это термин, относящийся к области оборудования, описывающий, насколько большой монитор может позволить себе купить пользователь.Обновление: Я изначально написал этот ответ еще в 2009 году, с моим пониманием существующих технологий. Как уже указывал @thure, теперь вы можете (начиная с 2012 года) использовать функцию
stackoverrun.com
Настройка GUI в линуксе для мониторов с High DPI / Habr
В последнее время появилось достаточно много мониторов с высоким разрешением, 150 dbi и выше, особенно в ноутбуках. И при этом всё выглядит жутко маленьким.Причина этого — система думает что у Вашего монитора разрешение 96..100 dpi.
Решать это только увеличением размера шрифта неправильно, т.к. размеры всех остальных элеменов интерфейса остаются маленькими. Надо чтобы графическая оболочка сама это делала.
Мне с решением этой проблемы пришлось весьма долго рыться в интернете, собирая мелкие заметки, т.к. не оказалось места где бы это можно было увидеть всё вместе.
Ниже будет идти список где что поправить, все параметры привожу для своего монитора — 13,3″ при 2560×1600, это даёт 226 dpi. Более высокое разрешение сейчас я видел только в ноутбуке Fujistu U904 — 262 dpi.
Параметры монитора: в xorg.conf в параметрах монитора дописать:
Option «DPI» «226 x 226»
или
DisplaySize 286 179 # это тоже самое, но размер экрана задаётся в миллиметрах
Если у Вас нет xorg.conf и монитор у Вас только 1, то можно задать это монитору по умолчанию. Для этого в каталоге конфига иксов создаётся файл xorg.conf.d/90-monitor.conf с таким содержимым:
Section "Monitor" Identifier "<default monitor>" Option "DPI" "226 x 226" EndSection
В ключи запуска иксов надо дописать -dpi 226, в kdm это строка параметра ServerArgsLocal
Для шрифтов в /etc/X11/Xresourse или ~/.Xresourse:
Xft.dpi 96 заменить на 226
После перезапуска исков можно проверить что это вступило в силу:
— в логе иксов должны быть такие строки /var/log/Xorg.0.log
intel(0): clock: 268.5 MHz Image Size: 286 x 179 mm
intel(0): DPI set to (226, 226)
— xdpyinfo | grep -B2 resolution
screen #0:
dimensions: 2560×1600 pixels (287×179 millimeters)
resolution: 227×227 dots per inch
— xrdb -query | grep dpi
Xft.dpi: 226
Но есть куча программ и GUI которые не смотрят на параметры иксов. Поэтому продолжаем.
Для KDE: Параметры системы => Основные параметры внешнего вида => Шрифты => Использовать другой DPI: 226.
Но значки придётся увеличить отдельно: Параметры системы => Основные параметры внешнего вида => Значки, вкладка Дополнительно.
Для Gnome: в gconf прописать в /desktop/gnome/font_rendering/dpi (нужно ли тут ещё что-то дополнительно — я не знаю, т.к. не пользуюсь Гномом).
Для Firefox: в about:config: layout.css.PixelsPerPx=2.26, layout.css.dpi=226.
Но нередко для броузере не нужно 100% соответствие, поэтому я себе чтобы больше влазило на экран прописал layout.css.PixelsPerPx=2. Хотя firefox и даёт при этом самое точное соответсвие картинке при 100 dpi, но использует странное масштабирование растровых изображений. Сначала внутри получает изображение которое должно было бы быть при 100 dpi, а потом растягивает в 2 раза. Из-за этого картинки получаеются мыльными даже если они имеют высокое разрешение
Для Opera: достаточно установить 200% мастабирование — опера это делает достаточно корректно.
Для Chrome в chrome://flags/ есть параметр «Режим высокого разрешения», но для linux он не доступен. Поэтому остаётся только поставить 200% и «очень крупный» размер шрифта. К сожалению, это не влияет на flash.
Но я у себя поставил в нём 120% и использую для просмотра карт (maps.yandex.ru, maps.google.ru) для высокой детализации картинки.
Konqueror пока не понимает high dpi, и масштабирует неверно, хотя akregator, используя тот же движок, показывает всё правильно без дополнительных указаний.
Проверить что Ваш dpi понят системой корректно лучше всего открыв страницу формата A4 в офисной программе, например OpenOffice, и при 100% масштабировании приложив бумажный лист. Если всё работает правильно, то размеры совпадут.
Так же в OpenOffice в настройках стоит поставить размер значков «большие».
После всех настроек нашлись конфликты жёстко заданных растровых картинок и увеличившихся шрифтов.
Я такое увидел в kdm и в Opera: работать можно, но выглядит не очень приятно — края букв вылазят за отведённые для надписей поля. Поэтому я в Xresourse заменил 226 на 175. (Вообще странно что opera, считывая размер dpi для меню и других надписей, не использует этот же dpi для отображения html страницы).
PS Собиралось это изначально только для себя тут, но оказалось что сейчас такой вопрос появляется у многих. Буду рад если появится какие-то конструктивные дополнения.
habr.com
Высокие значения DPI в ОС Windows / Habr
Windows, начиная с Vista, предоставляет два механизма для адаптации приложений к мониторам с высокой плотностью пикселей (точек на дюйм, DPI): увеличенные системные шрифты и полномасштабное увеличение окон. К сожалению, попытка заставить некоторые ваши приложения работать в каком либо из режимов может оказаться безуспешной, благодаря сочетанию нерадивых разработчиков и плохих решений принятых Microsoft.Эта страница предназначена для того, чтобы помочь пользователям понять и исправить, возможные проблемы при настройке высоких значений DPI. Пожалуйста, обратите внимание что мы рассмотрим только традиционные приложения Windows, не Windows Store («Metro», «Modern UI») приложения. Последние используют новый API WinRT, который обеспечивает собственный механизм масштабирования.
- От переводчика
- Методы масштабирования
- Как изменить установки DPI
- Типы приложений, как они масштабируются (или не масштабируются)
- Дальнейшее чтение для разработчиков (без перевода)
От переводчика
В этой статье применяются следующие сокращения которые я счел переводить не целесообразно: Графический Интерфейс Пользователя (GUI), Точек На Дюйм (DPI), DPI-Aware приложения – приложения которые умеют при различных значениях DPI правильно, без искажений отображать свой GUI, Графический Интерфейс Устройства (GDI). Мои комментарии (выделены курсивом).
Методы масштабирования
Традиционно родные приложения Windows для рабочего стола используют два механизма вывода на экран:
- Функции Графического Интерфейса Устройства (GDI) для доступа к дисплею. Как правило, GDI координаты измеряются непосредственно в пикселях экрана независимо от размера монитора и плотности пикселей.
- И вывод текста используя системные шрифты Windows. Это не является обязательным, но большинство приложений использует системные шрифты для большей части их графического интерфейса пользователя (GUI).
Изначально большинство мониторов было с плотностью пикселей около 96 точек на дюйм. Так что GUI, использующий эту особенность, выглядел примерно одинаково на любой системе. Но, как только плотность пикселей увеличивается, элементы GUI таких приложений уменьшаются в пересчете на сантиметры или дюймы(реальные, которые измеряются с помощью линейки приложенной к монитору). Мелкий текст и другие мелкие детали становиться все труднее разглядеть.
Чтобы исправить ситуацию, Microsoft решила, что неплохо встроить какой-нибудь метод масштабирование в Windows. Один из двух методов описанных ниже (Windows XP или Vista), применяется когда пользователь устанавливает DPI со значением выше чем стандартные 96 точек на дюйм. Оба метода пытаются увеличить размер элементов изображения.
Масштабирование в стиле Windows XP
Первый из этих методов, как можно догадаться, появился в Windows XP. Этот метод, на самом деле, не является методом масштабирования приложений с графическим интерфейсом как таковой. Масштабируются, при более высоких настройках DPI, только системные шрифты и некоторые элементы пользовательского интерфейса системы (я бы назвал его «метод НЕ масштабирования» в стиле Windows XP).
Все остальные элементы приложений по-прежнему отображаются в масштабе 1:1. Единственной разницей в их внешнем виде является то, что любой текст и некоторые элементы GUI, выводимые с помощью системных функций, вдруг становиться больше. Например, текст на кнопках. Это вызывает очевидные проблемы которые мы обсудим чуть позже.
Масштабирование в стиле Windows Vista или DPI виртуализация
Windows Vista представила второй вариант со странным названием, «масштабирование дисплея», без каких-либо уточнений, видимо, чтобы окончательно запутать пользователей. Мы будем использовать более описательное имя – метод DPI виртуализации. Когда этот метод включен, Windows по-прежнему выполняет масштабирование в стиле Windows XP. Также как и прежде размеры всех системных шрифтов и некоторых элементов интерфейса системы увеличиваются.
Разница в том, что приложения, которые могут правильно использовать высокие значения DPI, должны сообщить об этом Windows. Такие приложения должны установить новый DPI-Aware флаг, либо путем вызова функции Win32 API «SetProcessDPIAware», или, предпочтительно, путем встраивания манифеста с флагом dpiAware. А вот если у приложения отсутствует DPI-Aware флаг, Windows ведет себя по другому, сначала она формирует внутреннее отображение в масштабе 96 точек на дюйм (эмулируя для приложения DPI равный 96), а затем, масштабирует полученное изображение в соответствие с текущими настройками DPI перед выводом на экран.
Это было бы фантастическим метод масштабирования если бы все наши мониторы имели плотность пикселей последних аппаратов iPhones (326 точек на дюйм). К сожалению это не так. Окна приложений масштабированные таким образом выглядят чересчур размыто, при популярном разрешении 120 точек на дюйм (@homm это не разрешение, кстати). Поэтому, Microsoft по умолчанию отключает DPI виртуализацию, если вы выберете плотность пикселей меньше или равную 120 DPI.
Как изменить установки DPI
В Windows 7/8, откройте «Панель управления», a затем выберите «Оформление и персонализация», затем «Экран», и, наконец, выберите «Установить размер шрифта (DPI)» (Windows 7) или «Пользовательские параметры размера» (Windows 8). Вы увидите следующее диалоговое окно (Windows 7, в Windows 8 почти идентично):
В раскрывающимся списке можно выбрать нужную настройку DPI в процентном соотношении, где 100% соответствует 96 DPI, 125% — как на скриншоте, соответствует 120 точкам на дюйм (можно более точно записать значение вручную). До Windows 8 фактическое значение DPI («пикселей на дюйм») отображалось рядом с размером системного шрифта. Windows 8, по непонятным причинам, не показывает значение DPI, так что вы должны рассчитать его самостоятельно.
Также вы можете приложить линейку (у которой есть шкала в дюймах) к экрану, и пытаться совместить маркировку на ней с маркировкой на экране, изменяя значение в раскрывающимся списке. Флажок, обведенный красным внизу, определяет, следует ли использовать только масштабирование в стиле Windows XP, или также новый способ DPI виртуализации. Если флажок не отмечен, как на скриншоте, то DPI виртуализация включена.
Декламация. Это диалоговое окно пример интерфейса не дружественного к пользователю. На первый взгляд кажется, что это флажок для отключения масштабирования в стиле Windows XP. Но этот метод масштабирования (который только увеличивает системные шрифты и другие элементы пользовательского интерфейса системы — масштабирование Windows XP) всегда включается при выборе высокого значения DPI. На самом деле этот флажок управляет, будет ли этот метод единственным (Использовать только масштабы в стиле Windows XP), или также будет применен метод «DPI виртуализации» для приложений, которые не имеют DPI-Aware флага. Так что этот флажок не контролирует метод масштабирования указанный в его название, а контролирует другой метод масштабирования, нигде не упомянутый — и позволяет использовать новый метод, когда флажок снят!
Ошибка в Windows 8. В дополнение к этому, в Windows 8 это диалоговое окно с ошибкой. Как правило, все работает как и в Windows 7, но состояние флажка не сохраняется на значениях DPI 150% и выше. Когда вы устанавливаете этот флажок, «DPI виртуализация» правильно отключается. Тем не менее, сам флажок остается не отмеченным, когда вы в следующий раз открываете этот диалог.
Изменения в Windows 8.1, или почему все размыто?
В Windows 8.1 флажок для масштабирования в стиле Windows XP исчез, и теперь «DPI виртуализация» никогда, не используется при значениях DPI до 120 включительно, но всегда используется при более высоких значениях для тех программ, у которых отсутствует DPI-Aware флаг. Если некоторые приложения кажутся вам нечеткими, необходимо вручную отключить для них DPI виртуализацию.
Windows 8.1 позволяет использовать несколько мониторов с разным значением DPI. Однако эта функция, также заставляет использовать «DPI виртуализацию» для традиционных приложений, которые перемещаются между мониторами с разными значениями DPI. Чтобы этого избежать, можно отключить в настройках «DPI масштабирование», используя новую опцию «Я хочу выбрать один масштаб для всех дисплеев».
Также Windows 8.1 добавляет специальный переключатель для настройки 200% и новый API, чтобы разработчики могли выборочно отключать «DPI виртуализацию».
Помогите, мои системные шрифты не правильного размера!
Иногда, после изменения настроек DPI, вы можете заметить что некоторые системные шрифты стали слишком большими или слишком маленькими для новых установок. Вероятной причиной является то, что вы используете пользовательскую тему рабочего стола на основе ваших старых настроек DPI. Windows не масштабирует шрифты пользовательской темы.
Если вы на самом деле создали пользовательскую тему рабочего стола и хотите сохранить её, вам придется самостоятельно адаптировать шрифты к новым настройкам DPI. Однако, Windows имеет раздражающую привычку «услужливо» создавать пользовательские темы без вашего ведома, по какой-либо причине. Так что, если вы никогда не создавали пользовательскую тему рабочего стола просто удалите её и вернитесь к стандартной теме.
В Windows 7/8, откройте Панель управления, выберите «Оформление и персонализация», а затем «Персонализация». Если вы видите выбранную запись в строке «Мои темы», это означает, что ОС Windows использует тему пользователя, системные шрифты которой Windows не будет масштабировать. Выберите стандартную тему, например, первую запись в разделе «Темы Aero» (Windows 7) или «Windows» «Темы по умолчанию» (Windows 8) и удалите нежелательные записи в разделе «Мои темы». Теперь, все системные шрифты должны отображаться правильно.
Типы приложений, как они масштабируются (или не масштабируются)
Теперь давайте рассмотрим какие методы должны использоваться для существующих Windows приложений при высоких значениях DPI. Следующая таблица обобщающая, позже мы рассмотрим различные случаи более подробно.
DPI-Aware флаг не установлен | DPI-Aware флаг установлен | |
Не DPI-Aware | Нужно использовать DPI виртуализацию | Нужны исправления от разработчиков |
DPI-Aware | Нужно использовать масштабирование в стиле Windows XP | Всегда масштабируется правильно |
Приложения вообще не заботящиеся о DPI — это либо очень старые или плохо написанные, но, тем не менее, по-прежнему используемые. Одним известным примером является ITunes от Apple для Windows. Здесь разработчики используют системные шрифты для GUI и, не заботясь о фактических размерах шрифта, они жестко привязывают размеры окон к разрешению 96 DPI, естественно искажая GUI, когда при более высоких значениях DPI увеличиваются размеры шрифтов.
Такие приложения требуют нового метод масштабирования «виртуализации DPI», к сожалению, это часто делает интерфейс размытым. В противном случае вы столкнетесь с проблемами начиная, от обрезания текста до перекрытия элементов контроля, иногда, делая GUI полностью непригодным (к счастью, это, случается редко). За эти годы я собрал несколько образцов скриншотов не корректных приложений.
разрешение 150% (144 DPI)
Приложения умеющие подстраивать свой GUI под различные значения DPI, но не имеющие DPI-Aware флага — Это типичные приложения эпохи Windows XP. Здесь разработчики позаботились, чтобы получить фактические размеры шрифтов системы перед созданием GUI. Такие приложения отображаются корректно при использование масштабирования в стиле Windows XP. К сожалению, так как они не устанaвливают DPI-Aware флаг, чтобы сообщить Windows этот факт, для них, по умолчанию, будет использована «DPI виртуализация», делая их GUI нечетким. Это может вам не понравиться, так что, вы, возможно, захотите принудительно использовать стиль масштабирования Windows XP для таких приложений.
Пример такого приложения и разрешение 150% (144 DPI)
Приложения умеющие подстраивать свой GUI под различные значения DPI, имеющие DPI-Aware флаг — Это новейший тип приложений которые полностью беспроблемны, независимо от настроек DPI. DPI-Aware флаг установлен автоматически для Windows Presentation Foundation (WPF) и GDI+ приложений, так как эти APIs предоставляют встроенные средства масштабирования. Разработчикам использующим старый GDI API и (удивительно) Windows Forms, нужно вручную помечать свои DPI-Aware приложения.
Приложения не приспособленные к изменению DPI, но имеющие DPI-Aware флаг — это еще хуже чем полностью игнорирование значения DPI. В примерах вы найдете GUI приложений, хорошо масштабируемых вплоть до 120 DPI, но не выше, или приложений JavaFX. Тут мы уже ничего сделать не можем, т.к. у нас нет возможности заставить Windows использовать DPI виртуализацию, для таких программ. После того как DPI-Aware флаг установлен, приложение должно масштабировать себя самостоятельно. Мы можем только «пилить» разработчиков исправить их продукт — или использовать что-то другое.
Выбор метода масштабирования для ваших приложений
После того как вы решили что вы хотите использовать высокое значение DPI, ваш выбор метода масштабирования зависит от приложений в которых вы работаете. Имейте в виду, что, отключить «DPI виртуализацию» означает, установить флажок (check box) с некорректным названием «Использовать масштабы в стиле Windows XP» и наоборот.
- Если вам так невероятно повезло использовать только те приложения, которые являются одновременно DPI-Aware и устанавливают нужный флаг, тогда не имеет значения какой метод масштабирования вы выберете. Все приложения будут использовать масштабирование в стиле Windows XP, а DPI виртуализация никогда не будет использоваться.
- Если вы используете только хорошо написанные DPI-Aware приложения, но некоторые из них не устанавливают необходимый флаг, вы можете отключить «DPI виртуализацию». Таким образом, все приложения будут отображаться правильно без какого-либо замыливания вследствие масштабирования. Если ваш монитор имеет очень высокую плотность пикселей, такую, что масштабированные растровые изображения больше не выглядят размытыми, вы, возможно, захотите включить DPI виртуализацию в любом случае.
- Если у вас есть одно или несколько приложений не приспособленных к изменению DPI и не имеющие DPI-Aware флага, необходимо включить DPI виртуализацию, если вы не готовы мириться с перекошенным GUI приложений. К сожалению, тут возникает еще одна проблема, потому что, Microsoft реализовала эту опцию неудобно. Вы можете включить DPI виртуализацию только для всей системы, а не для отдельного приложения, а затем выборочно отключать для отдельных приложений.
Напоминаем, что в Windows 8.1 уже нет возможности выбора в этом вопросе. Если вы работаете при разрешении в 120 точек на дюйм (125%), каждая программа будет вынуждена использовать масштабирование в стиле Windows XP, a если вы работаете с более высоким разрешением, каждая программа, которая не является DPI-Aware, будет использовать по умолчанию «DPI виртуализацию».
Отказ от DPI виртуализации для отдельных приложений
После того как вы решили включить DPI виртуализацию или вы работаете в Windows 8.1, с разрешением более чем 120 точек на дюйм, вы можете проверить систему на предмет наличия DPI-Aware приложений, которые не имеют соответствующий флаг. И вернуть им возможность использовать масштабирование в стиле Windows XP, для которого они предназначены. Есть два способа сделать это, первый работает только для 32-разрядных приложений, второй универсален и подходит также для 64-битных приложений.
32-разрядные приложения — Это просто: щелкните правой кнопкой мыши на исполняемом файле в Проводнике Windows, выберите диалоговое окно «Свойства», перейдите на вкладку «Совместимость» и установите флажок «Отключить масштабирование изображения при высоком разрешении экрана». Вот и все, в Windows 8.1 это также работает для 64-битных приложений.
64-разрядные приложения — Без всякой видимой причины, возможно чтобы позлить пользователей 64-битных приложений, в Windows 8 и более ранних, упомянутый выше флажок, для 64-разрядных приложений отключен, хотя сам вариант вполне функционален, если внести изменения непосредственно реестр! Так что, запустите редактор реестра и перейдите к этому ключу:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Теперь добавьте строковое значение (REG_SZ), чье имя является полным путем к исполняемому файлу приложения и значением которого является HIGHDPIAWARE. Я рекомендую, чтобы вы сначала изменили несколько 32-битных приложений, как описано выше, чтобы вы могли увидеть некоторые примеры значений в этом ключе реестра.
Мы рассмотрели, как можно использовать настройки DPI на Windows Vista и более поздних версиях. И если вы когда-нибудь задумывались, для чего предназначена опция совместимости — «Отключить масштабирование изображения при высоком разрешении экрана». И почему она ничего не делает на вашей системе, теперь вы знаете: она эффективна, только если у вас включена общесистемная опция «DPI виртуализации» и только для приложений, которые не устанавливают DPI-Aware флаг должным образом, но при этом корректно используют масштабирование в стиле Windows XP.
Дальнейшее чтение
For more information about both scaling methods from a developer perspective, see the MSDN article Writing High-DPI Win32 Applications. This content has moved to Writing DPI-Aware Desktop and Win32 Applications. This lengthy article also contains a sample manifest to declare an application as DPI-aware, as well as sample screenshots for the various scaling methods and tips on display scaling in native code.
Unfortunately, the article currently only covers Windows XP through 7. See Writing DPI-Aware Desktop Applications in Windows 8.1 Preview (Word DOCX) and Chuck Walbourn’s Manifest Madness for additional information on Windows 8 and 8.1.
Outside of Microsoft, Gastón Hillar has published two articles targeting Windows 8.1 at Dr. Dobb’s. Part 1 covers basic concepts, and part 2 shows C/C++ sample code for the Win32 API.
You might also wish to check out Andrew McKinlay’s The Joys of High DPI for a nice (and terrifying) war story on working with high DPI in Windows 7. Lastly, see DPI Scaling in Windows GUIs for an evaluation of .NET and Java GUI frameworks with regard to DPI scaling.
P.S. Ссылка по теме и как посмотреть DPI-Aware флаг приложений.
Спасибо homm за помощь.
habr.com