Система координат. Типы данных для описания координат



 

В GDI + используется система координат, построенная на основе воображаемых математических прямых, которые проходят через центры пикселей. Они пронумерованы, начиная с 0: пересечение этих прямых в левом верхнем пикселе имеет координаты X = 0, Y = 0 во всех координатных пространствах. Каждое окно обладает своим координатным пространством и пользовательской областью, обрамляемой границей и в точности соответствующей области, в которой может располагаться графическое изображение. Получить пользовательскую область можно с помощью свойства ClientRectangle класса Control. В нём содержатся размеры (ширина Width и высота Height) пользовательской области.

Существуют три структуры, которые наиболее часто используются для задания координат: Point (точка), Size (размер) и Rectangle (прямоугольник).

Объект Point используется для представления отдельной точки (пикселя). Многие методы класса Graphics могут принимать его в качестве параметра. Создаётся точка следующим образом:

 

Point point = new Point(1, 1);

 

У точки Point имеются свойства X и Y, которые позволяют узнавать и задавать её координаты X и Y.

Объект Size используется для представления размера, выраженного в пикселях, определяя как ширину, так и высоту. Объект создаётся аналогично объекту Point. Узнавать и задавать ширину и высоту, определяемую объектом Size, можно с помощью свойств Width и Height.

Объект Rectangle используется для задания координат прямоугольников. У Rectangle есть два конструктора. Одному конструктору в качестве аргументов передаются координаты:

 

Rectangle rectangle = new Rectangle(1, 1, 100, 200);

 

Второй конструктор принимает объекты Point и Size.

Для более точного позиционирования предназначены аналогичные структуры PointF, Si - zeF и Re с tangleF с полями типа System.Single.

Объект GraphicsPath (графический путь) представляет собой последовательность соединенных между собой прямых и кривых. Для создания графического пути могут использоваться прямые, кривые Безье, дуги, секторы, многоугольники, прямоугольники и многое другое. После определения сложного пути можно вывести его на экран с помощью метода DrawPath(). Для заливки пути можно использовать метод FillPath().

Для создания объекта GraphicsPath используется массив точек и массив PathTypes – массив байтов, в котором каждый элемент соответствует элементу из массива точек и содержит информацию о том, как следует строить графический путь через данную точку. Например, если точка является начальной точкой пути, то тип пути для этой точки будет иметь значение Path - PointType.Start. Если эта точка является точкой соединения двух линий, то тип пути – Path - PointType.Line. Если точка используется для создания кривой Безье между двумя точками, то тип пути – PathPointType.Bezier. Например, следующий код создаст фигуру справа:

 

System.Drawing.Drawing2D.GraphicsPath path; path = new GraphicsPath(new Point[]{ new Point(1, 1), new Point(100, 150), new Point(10, 15), new Point(300, 210), new Point(30, 10) }, new byte[]{ (byte)PathPointType.Start, (byte)PathPointType.Line, (byte)PathPointType.Bezier, (byte)PathPointType.Bezier, (byte)PathPointType.Bezier } ); canvas.DrawPath(Pens.Black, path);    

 

Класс GraphicsPath обладает набором Add-методов (AddArc(), AddBezier(), …), позволяющих добавлять соответствующую фигуру к текущему графическому пути.

 

Вывод графических примитивов

Цветовая палитра

 

Большая часть графических операций в GDI + предполагает выбор некоторого цвета. В Windows для представления цветов используются коды RGB (red-green-blue, «красный-зеленый-синий»). Цвета в GDI + обладают ещё четвертым компонентом – Alpha, с помощью которого можно задавать затенённость цвета.

В . NET Framework цвета инкапсулированы в структуру Color. Можно синтезировать цвет, передавая значения составляющих его красного, зеленого и синего цветов метода FromArgb структуры Color, но необходимость в этом возникает редко. В структуре Color содержится приблизительно 150 различных свойств, которые предоставляют широкий выбор заранее определенных цветов. Например:

 

System.Drawing.Color color = Color.DarkOrange;

Класс Pen

 

Класс Pen (перо) определяет цвет, толщину и шаблон линии, которая рисуется программой. Шаблон определяет, требуется ли нарисовать сплошную линию или линию, состоящую из чёрточек и точек.

При создании объекта Pen его конструктору можно передать цвет и ширину линии. Например:

 

Pen pen = new System.Drawing.Pen(Color.ForestGreen, 1); canvas.DrawLine(pen, new Point(10, 10),

new Point(this.ClientRectangle.Width, this.ClientRectangle.Width/2));

 

В примере в качестве цвета выбран ForestGreen и установлена единичная ширина.

Однако существует более простая возможность получить такой объект – использовать класс Pens. Содержит приблизительно 150 объектов Pen – по одному на каждый из предварительно описанных цветов. Например:

 

canvas.DrawLine(Pens.Aquamarine, new Point(10, 10),new Point(150, 100));

 

Основные свойства класса Pen представлены в табл. 2.

Таблица 2. Основные свойства класса Pen

Свойство Тип Описание
Brush System.Drawing.Brush Получает или задаёт объект Brush, определяющий атрибуты объекта Pen
Color System.Drawing.Color Получает или задаёт цвет объекта Pen
CompoundArray System.Single[] Получает или задаёт массив значений, определяющий составное перо. Составное перо рисует составную линию, состоящую из параллельных линий и разделяющих их промежутков
CustomEndCap System . Drawing . Drawing 2 D . CustomLineCap Получает или задаёт настраиваемое окончание линий, нарисованных при помощи объекта Pen
CustomStartCap System . Drawing . Drawing 2 D . CustomLineCap Получает или задаёт настраиваемое начало линий, нарисованных при помощи объекта Pen
DashCap System . Drawing . Drawing 2 D . DashCap Получает или задаёт стиль окончания пунктиров, ограничивающих пунктирные линии, нарисованные при помощи объекта Pen
DashOffset System.Single Получает или задаёт расстояние от начала линии до начала штрихового шаблона
DashPattern System.Single[] Получает или задаёт массив настраиваемых штрихов и промежутков
DashStyle System . Drawing . Drawing 2 D . DashStyle Получает или задаёт стиль, используемый для пунктирных линий, нарисованных при помощи объекта Pen
EndCap System . Drawing . Drawing 2 D . LineCap Получает или задаёт стиль окончания линий, нарисованных при помощи объекта Pen
LineJoin System.Drawing . Drawing2D. LineJoin Получает или задаёт общий стиль окончаний для двух последовательных линий, нарисованных при помощи объекта Pen
MiterLimit System.Single Получает или задаёт ограничение толщины соединения скошенных углов
PenType System . Drawing . Drawing 2 D . PenType Получает стиль линий, нарисованных с помощью объекта Pen
StartCap System . Drawing . Drawing 2 D . LineCap Получает или задаёт стиль начала линий, рисуемых при помощи объекта Pen
Transform System.Drawing . Drawing2D.Matrix Получает или задаёт копию геометрического преобразования объекта Pen
Width System.Single Получает или устанавливает ширину пера Pen в единицах объекта Graphics, используемого для рисования

 

Перья рисуют не только сплошные линии, но и линии, состоящие из точек и штрихов. Стиль такой линии задаёт свойство пера DashStyle, принимающее значения из перечисления DashStyle. Свойство DashOffset позволяет управлять положением начальной точки шаблона пунктирной линии. Это свойство задаёт смещение точки начала шаблона, определяющего вид точек и штрихов данного стиля. Единица смещения – размер точки, величина смещения не зависит от толщины пера.

Свойство DashPattern позволяет пользователю задавать свой шаблон штрихпунктирной линии. Заданный этим свойством массив значений типа float указывает длину чередующихся штрихов и пробелов между ними. Единица всех размеров – размер точки. Например:

 

float[] penDash = {2, 1, 4, 3}; pen.DashPattern = penDash;

 

В примере шаблон линии состоит из штриха длиной в две точки, пробела, еще одного штриха (длиной в 4 точки) и трёх пробелов подряд.

DashStyle приобретает значение Custom после определения свойства DashPattern.

Вывод текста

 

При выводе текста прежде всего нужно определиться с его шрифтом. Шрифты различаются по названиям (typeface name) и кеглю (point size). Каждый шрифт принадлежит к той или иной гарнитуре (family). Многие (но не все) семейства шрифтов включают обычное (regular), полужирное (bold), курсивное (italic), и полужирное курсивное (bold italic) начертания. К тому же в Windows можно применить эффект подчеркивания и зачёркивания к любому шрифту.

Объекты шрифтов являются неизменяемыми, после создания объекта класса Font можно только получать значения его свойств, но не устанавливать их. Все необходимы характеристики шрифта передаются в качестве параметров конструктора при его создании: имя шрифта (с помощью объекта FontFamily ), размер шрифта в пунктах, стиль (перечисляемый тип FontStyle). Создание курсивного зачеркнутого шрифта Arial 12-го размера может выглядеть следующим образом:

 

Font font = new Font(new FontFamily("Arial"), 12, FontStyle.Italic | FontStyle.Strikeout);

 

При выводе в графическом режиме текста каким-либо определённым шрифтом на конкретной поверхности рисования часто бывает необходимо узнать длину данной строки текста, выраженную в пикселях. В результате использования различных шрифтов длина строки, выраженная в пикселях, будет различной – меньший по размеру шрифт будет занимать меньшее количество пикселей. Однако не менее важно обладать информацией о поверхности рисования, поскольку разрешение различных поверхностей рисования, выраженное в пикселях, также различно. Обычно экран имеет разрешение 72 пикселя на дюйм. Для определения длины строки для данного шрифта можно использовать метод MeasureString() объекта Graphics.

 

String graphStr = "Строка текста";

System.Drawing.Font font = new Font(this.Font, FontStyle.Italic); SizeF size = canvas.MeasureString(graphStr, font) ; canvas.DrawRectangle(Pens.White, 200, 200, size.Width, size.Height); canvas.DrawString(graphStr, font, Brushes.Gold, new RectangleF(200, 200, size.Width, size.Height));

 

В примере осуществляется вывод текста, обрамлённого рамкой, с использованием шрифта формы, но с курсивным начертанием.

При необходимости может быть выведен и многострочный текст. Для этого в методе DrawString() нужно задать такой прямоугольник вывода, ширина которого меньше длины строки выводимого теста (в пикселях), а высота достаточна для того, чтобы в нём уместилось несколько строк.

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

 

DrawString("Строка текста", font, Brushes.Black, 10, 10);

 

 

Задание. Создать оконное приложение с  pictureBox, ComboBox и Button. При нажатии на кнопку отрисовывать тот графический примитив, который выбран в ComboBox. В ComboBox содержится:

- Несколько точек

- Линию

- Треугольник

- Эллипс

- Окружность

- Прямоугольник

- Текст

- Произвольный многоугольник

 

Пример отрисовки произвольного многоугольника:

Point point1 = new Point(5, 5);

Point point2 = new Point(10, 25);

Point point3 = new Point(20, 40);

Point point4 = new Point(60, 90);

Point point5 = new Point(90, 30);

Point point6 = new Point(35, 20);

Point point7 = new Point(25, 15);

Point[] curvePoints = { point1, point2, point3, point4, point5, point6, point7 };

e.Graphics.DrawPolygon(redPen, curvePoints);


Дата добавления: 2019-03-09; просмотров: 174; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!