Поделиться через


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

Обновлен: Ноябрь 2007

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

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

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

Система координат

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

Система координат

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

Объемные координаты

от (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 можно использовать для задания единицы измерения, отличной от точки.

aa1hw2kk.alert_note(ru-ru,VS.90).gifПримечание.

Свойству 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);
aa1hw2kk.alert_note(ru-ru,VS.90).gifПримечание.

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

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

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

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

Объемные координаты

от (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);

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

Система координат

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

Объемные координаты

от (0, 0) до (2, 1)

Страничные координаты

от (2; 0,5) до (4; 1,5)

Координаты устройства

от (192, 48) до (384, 144)

См. также

Основные понятия

Матричное представление преобразований

Другие ресурсы

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