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


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

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)

Преобразование страницы сопоставляет координаты страницы с координатами устройства. Класс Graphics предоставляет свойства PageUnit и PageScale для манипулирования преобразованием страницы. Класс 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 точек на дюйм в вертикальном направлении, конечные точки линии в предыдущем примере имеют следующие координаты в трех координатах:

Координатное пространство Координаты конечной точки
Мир (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)

См. также