|
ArcaOS 5.0 Русская версия
Пакет русификации ArcaOS 5.0 OS/2 давно доступен.
Поддерживается любая версия: 5.0, 5.0.1, 5.0.2.
eCo Software может выпустить и другие пакеты
(Немецкий, Голландский, Бразильский Португальский, Испанский, Шведский и т.д.)
|
Что такое dpi и как с ним работать |
TITLE: Что такое dpi и как с ним работать
DATE: 2009-03-20 22:36:05
AUTHOR: Dmitry A.Steklenev
Что такое dpi и ppi
dpi (произносится как дипиай) - сокращение для англ. dots per inch количество
точек на линейный дюйм. Применяется для указания разрешающей способности плоского
носителя. Измеряется числом точек, приходящихся на линейный дюйм поверхности.
Например обозначение 600x300 dpi для принтера означает, что его разрешающая
способность равна 600 точек по горизонтали и 300 точек по вертикали на 1 дюйм.
ppi англ. pixels per inch - количество пикселей на линейный дюйм. То, что называется
разрешением электронной версии файла, на самом деле является параметром ppi -
количество пикселей на линейный дюйм. Пиксель - элементарная ячейка мозаики изображения.
В дальнейшем будет использоваться термин dpi.
Зачем нужно знать разрешающую способность экрана
Знание разрешающей способности экрана позволяет сформировать изображение
некоторого объекта так, чтобы он имел на экране определенные физические размеры.
Например, чтобы изобразить квадрат со стороной в один дюйм, нужно вывести на экран
монитора с разрешающей способностью в 96 dpi квадрат, каждая сторона которого состоит
из 96 пикселей. А для того чтобы напечатать этот же квадрат на принтере, имеющем
разрешающую способность в 600 dpi, его сторона должна состоять из 600 точек.
Почему 96 dpi и 120 dpi
Большинство VGA мониторов середины 80-х годов имели разрешение в районе от 70 до 74
dpi. Самыми "правильными" мониторами тех времен были мониторы компьютеров Macintosh
компании Apple, разрешающая способность которых была равна 72 dpi. На этих мониторах
один пиксел соответстовал одному типографскому пункту, который как раз и равен 1/72 дюйма.
Далее было замечено, что расстояние от человеческого глаза до поверхности монитора в
среднем на 1/3 превышает аналогичное расстояние до листа бумаги и изображение на мониторе
кажется меньше. Т.е. для того чтобы отображаемый на мониторе объект имел тот же визуальный
размер, какой он потом будет иметь на бумаге, его нужно делать на 1/3 больше. Для решения
этой проблемы был выбран странный способ, операционные системы стали рапортовать для
мониторов с с разрешающей способностью в районе 72 dpi значение в 96 dpi.
Позже, IBM разработали монитор 8514, имевший реальную разрешающую способность в 96 dpi,
и соответственно, в операционные системы была включена поддержка разрешающей способности
в 120 dpi.
На данный момент, огромный парк мониторов с разнообразнейшими физическими размерами и
поддерживаемыми разрешениями свел на нет все попытки привязать их к стандартному типографскому
пункту. Поэтому, на текущий момент, Windows считает все мониторы имеющими разрешающую
способность в 96 dpi и позволяет вручную сменить это значение на 120 dpi, а OS/2, по
умолчанию, считает все мониторы с разрешением меньше 1024x768 пикселей - мониторами с
разрешающей способностью в 96 dpi, а все остальные - мониторами с разрешающей способностью
в 120 dpi.
Зачем может понадобиться изменять разрешающую способность монитора
Очень важно понимание того, что изменение значения dpi для экрана монитора, это не
способ увеличения или уменьшения размера элементов изображения, а способ добиться их
правильного отображения. Т.е. если шрифт на экране с правильно выставленной разрешающей
способностью выглядит мелковато, то нужно менять типографский размер шрифта, а не dpi экрана.
Вы легко можете посчитать dpi для своего монитора, измерив линейкой одну из сторон экрана
и разделив количество пикселей, соответствующее этой стороне, на полученное значение. Другую
сторону можно не измерять, так как все современные мониторы используют квадратные пиксели и,
соответственно, имеют одинаковую разрешающую способность по горизонтали и вертикали.
Кроме того, зная разрешение экрана в пикселах по вертикали и горизонтали, а также зная длину диагонали монитора в линейных дюймах, dpi экрана можно легко рассчитать по следующей формуле:
Опасности неправильно выставленной разрешающей способности
Первая проблема - это несоответствие размеров видимого на экране шрифта и тому, что
получится при печати этого шрифта на принтере. Вторая и самая неприятная опасность связана с разработкой программ. На мониторе, для которого ошибочно выставлена слишком высокая
разрешающая способность, все элементы изображения будут казаться слишком большими, что
подвигнет разработчика на уменьшение типографского размера шрифта и, в результате, шрифт
может оказаться нечитаемым на мониторах с правильно выставленным dpi. Такие же проблемы
могут возникнуть и с элементами интерфейса программы.
Как узнать разрешающую способность экрана, используемую системой
Для этого в OS/2 нужно выяснить параметры устройства, используемого для отображения рабочего
стола. Делается это следующим образом:
HPS hps = WinGetPS( HWND_DESKTOP );
HDC hdc = GpiQueryDevice( hps );
LONG hres = 0;
LONG vres = 0;
DevQueryCaps( hdc, CAPS_HORIZONTAL_FONT_RES, 1L, &hres );
DevQueryCaps( hdc, CAPS_VERTICAL_FONT_RES , 1L, &vres );
Размеры шрифтов
Размер шрифтов в OS/2 указывается в типографских пунктах. Один типографский пункт
равен 1/72 дюйма. Поэтому, при самостоятельном отображении шрифта в программе, необходимо
пересчитать его размер с учетом текущей разрешающей способности экрана. Если воспользоваться
значениями, полученными в предыдущем примере, то делается это следующим образом:
SIZEF size;
size.cx = ( MAKEFIXED( font_size, 0 ) / 72 ) * hres;
size.cy = ( MAKEFIXED( font_size, 0 ) / 72 ) * vres;
GpiSetCharBox( hps_to_draw, &size );
Размеры значков
Значки в OS/2 имеют размер в 1/3 дюйма. Для мини значков применяется размер в 1/6 дюйма.
Поэтому, при использовании разрешающей способности в 96 dpi, иконки должны иметь размер
в 32x32 и 16x16 пикселей. При 120 dpi - этот размер увеличится до 40x40 и 20x20 пикселей
соответственно. Узнать размеры иконок, используемые системой, можно с помощью функции
WinQuerySysValue:
LONG icon_width = WinQuerySysValue( HWND_DESKTOP, SV_CXICON );
LONG icon_height = WinQuerySysValue( HWND_DESKTOP, SV_CYICON );
О координатах шаблонов диалогов
Координаты в шаблонах диалогов задаются в специальных единицах. Эти единицы базируются
на среднем размере символа шрифта, используемого системой по умолчанию. Одна единица по
горизонтали равна 1/4 ширины такого символа, а одна единица по вертикали равна 1/8 высоты
символа.
Так как средний размер символа будет изменяться при изменении dpi экрана, то использование
таких координат гарантирует, что диалог будет отображаться с соблюдением заданных в шаблоне
физических размеров при любом dpi экрана.
Средний размер символа для шрифта по умолчанию также можно выяснить у устройства,
используемого для отображения рабочего стола:
HPS hps = WinGetPS( HWND_DESKTOP );
HDC hdc = GpiQueryDevice( hps );
LONG char_height = 0;
LONG char_width = 0;
DevQueryCaps( hdc, CAPS_GRAPHICS_CHAR_WIDTH, 1L, &char_width );
DevQueryCaps( hdc, CAPS_GRAPHICS_CHAR_HEIGHT, 1L, &char_height );
OS/2 использует средний размер символа в 13x13 пикселей для разрешающей способности в 96
dpi и 16x16 для 120 dpi. Поэтому, одна единица координат шаблона диалога по горизонтали
будет равна 3.25 пиксела для 96 dpi и 4 пиксела для 120 dpi. По вертикали получатся
удвоенные значения - 6.5 и 8 пикселей соответственно.
Общие выводы
Как видно из предыдущего текста, все элементы пользовательского интерфейса OS/2
ориентированы на две возможные разрешающие способности - 96 dpi и 120 dpi. Появление
в современных видеодрайверах возможности выбора пользователем разрешающей способности
экрана можно только поприветствовать. Но некоторые драйвера, вместо изменения значения
dpi экрана, предлагают выбрать размер шрифта, размер значков и размер диалогов.
Такой вариант выбора является принципиально неверным и приводит к печальным последствиям.
Особенно, если неверная комбинация параметров выставлена у разработчика программного
обеспечения.
В частности, для драйвера Panorama, только две комбинации параметров являются
допустимыми. Крупный размер шрифта, крупный размер значков и средний размер диалогов
является правильным для разрешающей способности в 120 dpi. Мелкий размер шрифта, мелкий
размер значков и мелкий размер диалогов является правильным для разрешающей способности
в 96 dpi. Все остальные комбинации параметров являются неверными и не должны применяться.
Рекомендации для разработчиков
- Всегда создавайте пользовательский интерфейс программы с использованием шаблонов
диалогов. Такой интерфейс будет отображаться корректно при различных разрешающих
способностях экрана.
- Если по каким-то причинам, использование шаблонов диалогов является неприемлемым,
задавайте координаты создаваемых элементов управления в единицах диалогов и
конвертируйте их в обычные пиксельные координаты с помощью функции WinMapDlgPoints.
- Всегда используйте в качестве графических элементов диалогов стандартные значки OS/2.
Не используйте растровые изображения, так как они не масштабируются при изменении
разрешающей способности экрана.
- Если использование растрового изображения в диалоге является необходимым, подготовьте
два изображения. Одно с размером, соответствующим разрешающей способности в 96 dpi, а
другое - для 120 dpi. Подставляйте нужное изображение при инициализации диалога в
зависимости от текущей разрешающей способности экрана.
- При создании стандартного значка OS/2 создавайте все необходимые его изображения:
40x40, 32x32, 20x20 и 16x16 пикселей. Иначе OS/2 будет пытаться масштабировать
изображение самостоятельно, а это у нее не всегда хорошо получается.
- Периодически проверяйте, как выглядит программа при разрешающей способности,
отличной от той, с которой вы работаете постоянно.
Комментарии: Digi 2009-03-24 02:04:01 | Наконец-то всё стало ясно в этой кухне. Изложено ясно, без лишнего и по сути. | Sergey Posokhov 2009-03-25 19:19:11 | Исправил и дополнил свои тексты (своими словами), со ссылкой на источнег. Спасибо. | Milena 2009-06-02 09:37:01 | Спасибо! Все ясно и четко изложено. | Роман 2009-06-02 21:53:33 | Cпасибо! | Борис 2009-09-14 17:55:30 | Благодарю за статью! Чётко и понятно. | Алекс 2010-08-19 18:27:59 | тупая стаття !
не познавательная, и плохо обьясняется. Одним словои ничего не понятно с этой статти.
Смотрите 600x300 dpi.
А какое тогда разрешение у 192 pdi?
та тупизна а не стаття, автор сам без дупля. Можно сколько и не писать бестолку. | Лилия 2013-01-23 10:51:32 | Большое спасибо! | Digi 2016-12-15 09:09:18 | Что-то не так в разделе "О координатах шаблонов диалогов": "единица по горизонтали равна 1/4 ширины такого символа, а одна единица по вертикали равна 1/8 высоты символа", а потом: "По вертикали получатся удвоенные значения". Но 1/8 это никак не удвоенное 1/4.
Потом: "OS/2 использует средний размер символа ... 16x16 для 120 dpi". А у меня по DevQueryCaps() получается 20х20.
В остальном, по этой информации у меня не получилось получить такие же значения координат контролов в диалоге как получаются при построении из ресурса. |
Прокомментируйте эту статью (напоминаем, автор работал над текстом несколько недель, уважайте мнение других).
|
Каждый пользователь eComStation/Rus может бесплатно зарегистрировать несколько полезных программ (общая стоимость которых > 6000 руб). Дисковые утилиты, программы для интернета, расширители рабочего стола. Нужны ли тебе эти программы? |
|
|
|
Готовая eComStation на SSD диске
Последний активный опрос: Какая высота барьера RPM?
[Google]
|
IBM OS/2 Warp
|