Типы систем координат

В GDI+ используются три координатных пространства: мировое, страничное и пространство устройства. Мировые координаты — это координаты, которые служат для моделирования определенного графического пространства. Именно они передаются методам в .NET Framework. Координаты страницы — это система координат, используемая областью рисования, например формой или элементом управления. Координаты устройства — это система координат, используемая физическим устройством, на котором производится рисование, будь то экран или лист бумаги. При вызове myGraphics.DrawLine(myPen, 0, 0, 160, 80) точки, передаваемые методу DrawLine, — (0, 0) и (160, 80) — относятся к мировой системе координат. Перед тем как интерфейс GDI+ выполнит рисование линии на экране, координаты подвергнутся последовательности преобразований. Одно из преобразований, называемое преобразованием мировых координат, переводит мировые координаты в координаты страницы, после чего страничное преобразование переводит координаты страницы в координаты устройства.

Преобразования и системы координат

Предположим, что нужно использовать систему координат, начало которой расположено внутри клиентской области, а не в ее верхнем левом углу. Зададим, например, в качестве начала системы координат точку, удаленную на 100 точек от левого края и на 50 точек от верхнего края клиентской области. Такая система координат показана ниже на рисунке.

Illustration of a coordinate system.

При вызове метода myGraphics.DrawLine(myPen, 0, 0, 160, 80) на экран выводится линия, изображенная на рисунке ниже.

Illustration of a line in the coordinate system.

Ниже приведены координаты конечных точек линии в трех системах координат.

Координатное пространство Координаты конечных точек
World от (0, 0) до (160, 80)
Страница от (100, 50) до (260, 130)
Устройство от (100, 50) до (260, 130)

Обратите внимание, что начало отсчета пространства координат страницы расположено в левом верхнем углу клиентской области, такое положение является стандартным. Кроме того, обратите внимание, что, так как единицей измерения является пиксель, координаты устройства совпадают с координатами страницы. Если задать единицу измерения, отличную от пикселя, например сантиметр, тогда координаты устройства будут отличаться от координат страницы.

За преобразование мировых координат, которое служит для перевода мировых координат в координаты страницы, отвечает свойство Transform класса Graphics. В предыдущем примере преобразование мировых координат заключалось в смещении на 100 единиц вдоль оси X и на 50 единиц вдоль оси Y. В приведенном ниже примере задается преобразование мировых координат для объекта Graphics, а затем этот объект Graphics используется для рисования линии, изображенной на предыдущем рисунке.

myGraphics.TranslateTransform(100, 50);
myGraphics.DrawLine(myPen, 0, 0, 160, 80);
myGraphics.TranslateTransform(100, 50)
myGraphics.DrawLine(myPen, 0, 0, 160, 80)

Преобразование, переводящее координаты страницы в координаты устройства, называется страничным преобразованием координат страницы. За такое преобразование отвечают свойства PageUnit и PageScale класса Graphics. Класс Graphics также содержит два доступных только для чтения свойства DpiX и DpiY, позволяющих узнать количество точек на дюйм по горизонтали и вертикали в используемом устройстве отображения.

Свойство PageUnit класса Graphics можно использовать для задания единицы измерения, отличной от пикселя.

Примечание.

Свойству PageUnit невозможно присвоить значение World, так как это не физическая единица измерения. Произойдет исключение.

В приведенном ниже примере рисуется линия из точки с координатами (0, 0) в точку с координатами (2, 1), где точка с координатами (2, 1) расположена на 2 дюйма правее и на 1 дюйм ниже точки с координатами (0, 0).

myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

Примечание.

Если при создании пера не указать его ширину, в предыдущем примере будет нарисована линия шириной один дюйм. Ширину пера можно указать во втором аргументе конструктора Pen:

Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);
Dim myPen As New Pen(Color.Black, 1 / myGraphics.DpiX)

Если предположить, что устройство отображения содержит 96 точек на дюйм по горизонтали и 96 точек на дюйм по вертикали, координаты конечных точек прямой, нарисованной в предыдущем примере, в каждом из трех пространств координат будут совпадать с приведенными ниже значениями.

Координатное пространство Координаты конечных точек
World от (0, 0) до (2, 1)
Страница от (0, 0) до (2, 1)
Устройство от (0, 0) до (192, 96)

Обратите внимание, что, так как начало отсчета мировых координат расположено в левом верхнем углу клиентской области, координаты страницы совпадают с мировыми.

Сочетание преобразования мировых координат и преобразования координат страницы позволяет получать различные эффекты. Например, предположим, что нужно использовать дюймы в качестве единицы измерения, а начало координат должно быть расположено в 2 дюймах от левого края клиентской области и в 1/2 дюйма от верхней границы клиентской области. В приведенном ниже примере задаются преобразование мировых координат и преобразования координат страницы для объекта Graphics, после чего рисуется линия из точки с координатами (0, 0) в точку с координатами (2, 1).

myGraphics.TranslateTransform(2, 0.5f);
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.TranslateTransform(2, 0.5F)
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

На приведенном ниже рисунке изображена полученная линия и система координат.

Illustration of a line and coordinate system.

Если предположить, что устройство отображения содержит 96 точек на дюйм по горизонтали и 96 точек на дюйм по вертикали, координаты конечных точек прямой, нарисованной в предыдущем примере, в каждом из трех пространств координат будут совпадать с приведенными ниже значениями.

Координатное пространство Координаты конечных точек
World от (0, 0) до (2, 1)
Страница от (2, 0,5) до (4, 1,5)
Устройство от (192, 48) до (384, 144)

См. также