netlib.narod.ru< Назад | Оглавление | Далее >

А сколько это в твердой валюте?

Рассмотрим связь между пикселами и размерами предметов реального мира. Допустим, вы рисуете квадрат со стороной 100 пикселов, расположенный на расстоянии 100 пикселов от верхнего левого угла клиентской области (или области печати страницы принтера).

HundredPixelsSquare.cs

  //----------------------------------------------------
  // HundredPixelsSquare.cs (C) 2001 by Charles Petzold
  //----------------------------------------------------
  using System;
  using System.Drawing;
  using System.Windows.Forms;

  class HundredPixelsSquare: PrintableForm
  {
      public new static void Main()
      {
          Application.Run(new HundredPixelsSquare());
      }
      public HundredPixelsSquare()
      {
          Text = "Hundred Pixels Square";
      }
      protected override void DoPage(Graphics grfx, Color clr, int cx, int cy)
      {
          grfx.FillRectangle(new SolidBrush(clr), 100, 100, 100, 100);
      }
}

Какой размер будет у этого квадрата на экране? А на принтере? И вообще, будет ли эта фигура квадратом?

Ясно, что пока программа не запущена, представление о размерах этого квадрата на экране (по крайней мере относительно размеров самого экрана) останется весьма туманным. Обычно наименьший размер современных дисплеев — 640 пикселов по горизонтали на 480 по вертикали (или 640 × 480). На таком дисплее относительные размеры квадрата будут равны примерно 1/6 ширины и 1/5 высоты экрана. Однако размер современного дисплея может достигать и 2 048 × 1 536 пикселов, и тогда размер квадрата относительно полного размера экрана будет существенно меньше.

Было бы неплохо знать разрешение дисплея, выраженное в общих единицах измерения, например в точках на дюйм (dpi). Но если для принтеров этот параметр определен совершенно точно (обычно его можно найти даже на упаковке принтера), то для мониторов он остается довольно расплывчатым. Реальное разрешение дисплея в dpi определяется двумя параметрами: физическим размером экрана (обычно его измеряют в дюймах по диагонали) и соответствующим числом пикселов.

Сильно сбивает с толку то, что именно последний параметр часто называют разрешением дисплея. В классе SystemInformation этому параметру соответствует элемент PrimaryMonitorSize. Если вызвать диалоговое окно Display Properties (Свойства экрана) из Панели управления (или щелкнув Рабочий стол правой кнопкой и выбрав из контекстного меню Properties (Свойства) и перейти на вкладку Settings (Настройка), вы увидите, что размеры экрана в пикселах там названы областью экрана. Этот термин я и буду использовать

.

Современные видеоадаптеры поддерживают 5–6 вариантов размера области экрана, диагональ экрана мониторов также бывает разной. Вот небольшая таблица, в которой показано примерное разрешение дисплея в точках на дюйм для разных сочетаний размеров экрана монитора и области экрана:


Реальное разрешение дисплея (в точках на дюйм)



Область экрана Размер экрана монитора по диагонали

15 дюймов 17 дюймов 19 дюймов 21 дюйм

640 × 480 57 50 44 40
800 × 600 71 63 56 50
1 024 × 768 91 80 71 64
1 152 × 870 103/104 90/91 80/81 72/73
1 280 × 1 024 114/122 100/107 89/95 80/85
1 600 × 1 200 143 125 111 100
2 048 × 1 536 183 160 142 128


Предполагается, что размер видимой области экрана на один дюйм меньше объявленного, а стандартные пропорции экрана — 4:3. Например, реальный размер экрана 21-дюймового монитора по диагонали составляет 20 дюймов, или (спасибо Пифагору) 16 дюймов по горизонтали и 12 по вертикали. Для области экрана 1 152 × 870 и 1 280 × 1 024 отношение размеров по горизонтали и вертикали отличается от 4:3. Отсюда следует, что разрешение по горизонтали и вертикали тоже отличается, но эти отличия достаточно малы, и ими можно пренебречь.

Итак, если вы работаете на 21-дюймовом мониторе в режиме 1 600 × 1 200, то размер квадрата со стороной 100 пикселов на экране будет около 1 дюйма. Но при использовании других режимов экрана он может быть как меньше 1/2 дюйма, так и больше 2. Конечно, мало кто использует режим 640 × 480 на 21-дюймовом мониторе, как и 2 048 × 1 536 на 15-дюймовом. Значения разрешения дисплея, которые применяются чаще всего, занимают в приведенной выше таблице диагональ от левого верхнего угла к правому нижнему.

Поскольку Windows не знает размера монитора, она не может сообщить реальное разрешение экрана. Даже обладая такими сведениями, ОС окажется в зaтруднении. В самом деле, как должна действовать ОС, если в результате подключения к компьютеру видеопроектора создан экран шириной около 2 метров? Должна ли ОС считать, что разрешение экрана существенно снизилось, поскольку увеличился его размер? Почти уверен, что вам бы этого не хотелось.

Самая важная проблема с дисплеем в том, чтобы получить на нем читабельный текст. Шрифт по умолчанию должен быть достаточно велик, чтобы текст был пригоден для чтения, но не слишком велик, поскольку хотелось бы также, чтобы экран вмещал как можно больше текста.

По этой причине Windows в основном игнорирует область экрана и размер монитора, делегируя выбор разрешения экрана очень важной персоне — вам!

Я уже упоминал диалоговое окно Display Properties, в котором на вкладке Settings можно менять параметры экрана (заметьте: здесь описано диалоговое окно Display Properties в Windows 2000, в других версиях Windows оно может несколько отличаться). На вкладке Settings есть кнопка Advanced (Дополнительно). В сущности это обходной путь, следуя которым, вы сами выбираете разрешение экрана в точках на дюйм. Я сказал «обходной», так как реально вы выбираете при этом размер системного шрифта Windows, удобный для чтения. Предполагается, что кегль системного шрифта равен 10 пунктам (кегль шрифта измеряют в пунктах, а пункт в компьютерной типографии равен 1/72 дюйма). Размер шрифта с кеглем 10, выраженный в пикселах, зависит от разрешения дисплея, измеряемого в точках на дюйм.

Например, устанавливаемый по умолчанию системный шрифт называется Small Fonts (Мелкий шрифт). Высота символов этого шрифта составляет 13 пикселов. Если допустить, что кегль шрифта равен 10 пунктам, то 13 пикселов будут равны 10/72 дюйма, а разрешение дисплея составит (округленно) 96 dpi.

Высота символов другого варианта системного шрифта — Large Fonts (Крупный шрифт) — составляет 16 пикселов. Если принять 16 пикселов равными 10/72 дюйма, то в этом случае разрешение дисплея (тоже округленно) составит 120 dpi.

Кстати, системный шрифт Windows — это вовсе не шрифт по умолчанию, доступный в программе Windows Forms через свойство Font. Windows Forms устанавливает по умолчанию несколько более мелкий шрифт с кеглем около 8 пунктов 1.

Шрифты Large Fonts и Small Fonts — не единственно возможные. При выборе из списка пункта Other (Другой...) выводится специальная линейка. Настраивая ее вручную, можно выбрать по-настоящему большой (с разрешением 480 dpi) или маленький (около 19 dpi) шрифт.

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

Обычно физический размер символов выбранного системного шрифта несколько больше, чем можно предположить исходя из его кегля, выраженного в пунктах. Дело в том, что расстояние между глазами и бумагой при чтении напечатанного текста равно примерно 30 см, а расстояние между глазами пользователя и экраном монитора — 60 см или около того.



1 Ветеранам программирования для Windows будет любопытно узнать, откуда берутся мои числа. Здесь я могу сослаться на значения двух полей структуры TextMetric: tmHeight (равное 16 для Small Fonts и 20 для Large Fonts) и меньшее по значению tmInternalLeading (равно соответственно 3 и 4). Значение tmHeight подходит для межстрочного интервала, а меньшее значение tmInternalLeading показывает, как размер межстрочного интервала в пунктах преобразуется в высоту символа в пикселах (13 Для Small Fonts и 16 для Large Fonts). Может сбить с толку то, что у шрифта по умолчанию в Windows Forms есть свойство Font.Height, сообщающее близкие значения: 13 для Small Fonts и 15 для Large Fonts. Но это значение межстрочного интервала, сравнимое со значением tmHeight. Кегль системного шрифта Windows составляет 10, а шрифта по умолчанию в Windows Forms — около 8 пунктов.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz