Reviews / articles about OS/2 |
Operating systems: ArcaOS, eComStation, IBM OS/2 Warp |
|
|
DATE: 2009-03-20 22:36:05 AUTHOR: Dmitry A.Steklenev
Что такое dpi и ppidpi (произносится как дипиай) - сокращение для англ. 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. Все остальные комбинации параметров являются неверными и не должны применяться.
Рекомендации для разработчиков
Комментарии:
|
|
|||||||||||||||||||||||||||
(C) OS2.GURU 2001-2021