netlib.narod.ru | < Назад | Оглавление | Далее > |
В начале этой главы я привел программу HundredPixelsSquare, которая выводит квадрат со стороной 100 пикселов. Обсуждая ее, я задался вопросом: а какой размер будет у этого квадрата на экране? В действительности же ответ таков: понятие физического размера для такого объекта неуместно. Никто не думает, что, измеряя объекты приложенной на экране линейкой, можно извлечь хоть немного полезной информации. Важно другое: горизонтальная и вертикальная линейки, выводимые на экране, должны быть согласованы друг с другом. В этом смысле экранные размеры квадрата со стороной 100 пикселов, выраженные в дюймах, равняются:
100 / grfx.DpiX
100 / grfx.DpiY
т.е. 1,04 дюйма, если выбран системный шрифт Small Fonts, или 0,83 дюйма, если выбран шрифт Large Fonts, или иному значению, если выбран другой размер системного шрифта.
Теперь о принтере... наверное, вам стоит попробовать сделать это самостоятельно. Программа HundredPixelsSquare рисует на вашем принтере прямоугольник со стороной, в точности равной 1 дюйму. Давайте попробуем еще что-нибудь. Вот эта программа пытается нарисовать эллипс диаметром 1 дюйм, заданный свойствами DpiX и DpiY объекта Graphics:
TryOneInchEllipse.cs
//-------------------------------------------------- // TryOneInchEllipse.cs (C) 2001 by Charles Petzold //-------------------------------------------------- using System; using System.Drawing; using System.Windows.Forms; class TryOneInchEllipse: PrintableForm { public new static void Main() { Application.Run(new TryOneInchEllipse()); } public TryOneInchEllipse() { Text = "Try One-Inch Ellipse"; } protected override void DoPage(Graphics grfx, Color clr, int cx, int cy) { grfx.DrawEllipse(new Pen(clr), 0, 0, grfx.DpiX, grfx.DpiY); } }
На экране эллипс выглядит практически безупречно. Однако мой принтер с разрешением 600 dpi напечатал эллипс диаметром 6 дюймов.
Ясно, что в случае дисплея функциям рисования объекта Graphics передаются координаты, исчисляемые в пикселах. Но для принтера, кажется, все иначе. В этом случае функциям рисования объекта Graphics передаются координаты, исчисляемые в единицах по 0,01 дюйма независимо от вида и модели принтера. Чуть ниже мы увидим, как это работает. Изящность решения в том, что разрешение дисплея где-то около 100 dpi и принтер рассматривается как устройство с разрешением 100 dpi. Это значит, что в случае крайней необходимости можно использовать одни и те же координаты для просмотра графики на дисплее и печати ее на принтере, получая приблизительно одинаковые результаты.
netlib.narod.ru | < Назад | Оглавление | Далее > |