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< Назад | Оглавление | Далее >

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