- •Тема Графика в c#.
- •Контекст отображения
- •Класс Graphics
- •Событие Paint
- •Тема Методы и свойства класса Graphics. Рисование геометрических фигур Рисование линии (DrawLine)
- •Набор линий (DrawLines)
- •Рисование прямоугольника(DrawRectangle )
- •Набор прямоугольников (DrawRectangles )
- •Рисование многоугольника (DrawPolygon)
- •Рисование эллипса(DrawEllipse )
- •Результат работы метода DrawEllipse Рисование сегмента эллипса (DrawArc)
- •Рисование замкнутого сегмента эллипса(DrawPie)
- •Рисование кривых Безье (DrawBezier и DrawBeziers )
- •Рисование канонических сплайнов (DrawCurve и DrawClosedCurve)
- •Рисование закрашенных фигур.
- •Тема. Инструменты для рисования
- •Инструмент для рисования перо (Pen) и его свойства
- •Инструмент для рисования кисть (Brush)
- •Кисть SolidBrush
Рисование закрашенных фигур.
В классе Graphics определен ряд методов, предназначенных для рисования закрашенных фигур. Имена некоторых из этих методов, имеющих префикс Fill, мы перечислили в табл. 10‑2.
FillRectangle - рисование закрашенного прямоугольника;
FillRectangles – рисование множества закрашенных прямоугольников;
FillPolygon - рисование закрашенного многоугольника;
FillEllipse - рисование закрашенного сегмента эллипса;
FillPie - рисование закрашенного сегмента эллипса
FillClosedCurve Рисование закрашенного сплайна
FillRegion Рисование закрашенной области типа Region
Есть два отличия методов с префиксом Fill от одноименных методов с префиксом Draw. Прежде всего, методы с префиксом Fill рисуют закрашенные фигуры, а методы с префиксом Draw — не закрашенные. Кроме этого, в качестве первого параметра методам с префиксом Fill передается не перо класса Pen, а кисть класса Brush.
Рассмотрим пример рисования фигуры при помощи метода FillRegion.
Класс Region описывает внутреннюю часть графической формы, состоящей из прямоугольников и контуров.
Метод FillRegion заполняет внутреннюю часть объекта заданного при помощи объекта Region.
Для решения задачи создадим инструмент для рисования SolidBrush красного цвета.
SolidBrush myBrush = new SolidBrush(Color.Red);
Зададим область заливки в виде прямоугольника при помощи объекта класса Rectangle.
Rectangle myRect = new Rectangle(10,10, 200,200);
Вызов метода FillRegion будет выглядеть следующим образом.
g.FillRegion(myBrush,new Region(myRect));
Код обработчика события Form1_Paint имеет вид (см слайд).
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush myBrush = new SolidBrush(Color.Red);
Rectangle myRect = new Rectangle(10,10, 200,200);
g.FillRegion(myBrush,new Region(myRect));
}
Результат работы программы представлен на рис.
Рис. Работа метода FillRegion
Тема. Инструменты для рисования
На данный момент при рисовании стандартных фигур были использованы два инструмента для рисования: SolidBrush и Pen. В данном разделе будут описаны другие возможные инструменты для рисования и заливки различных фигур.
Стоит напомнить, что для использование некоторых возможностей класса Graphics необходимо подключить пространство имен System.Drawing.Drawing2D.
Инструмент для рисования перо (Pen) и его свойства
Перья используются для рисования линий и простейших геометрических фигур и создаются как объекты класса Pen.
Существуют несколько видов перегруженных конструкторов.
public Pen(Color); public Pen(Color, float); public Pen(Brush); public Pen(Brush, float);
Первый вариант конструктора создает перо заданного цвета. Цвет задается при помощи объекта класса Color, расположенного в пространстве имен System.Drawing.Color.
Pen myPen = Pen(Color.Red);
Второй конструктор позволяет дополнительно задать толщину пера при помощи аргумента типа float, в нашем случае толщина линии задается размером 4 пикселя.
Pen myPen = Pen(Color.Red, 4);
Третий и четвертый конструктор создают перо на основе кисти, причем в четвертом конструкторе можно указать толщину создаваемого пера.
Pen myPen = Pen(Brushes.Red, 4);
После того как перо создано, программа может определить его атрибуты при помощи свойств класса Pen. Рассмотрим отдельно свойства класса Pen.
Свойство PenAlignment пример использования приведен ниже. Это свойство определяет, каким образом объект Pen рисует замкнутые кривые и многоугольники. Перечислением PenAlignment задаются пять значений: Center; Inset; Right; Left; Outset. Однако только два значения — Center и Inset изменяют внешний вид рисуемой линии.
Значение Center устанавливается по умолчанию для этого свойства, и им задается центрирование ширины пера по контуру кривой или многоугольника. Значение Inset этого свойства соответствует размещению пера по всей ширине внутри границы кривой или многоугольника. Три другие значения, Right, Left и Outset задают центрированное перо.
Перо Pen, для которого выравнивание установлено равным Inset, выдает недостоверные результаты, иногда рисуя в позиции вставки, а иногда — в центрированном положении. К тому же, вложенное перо невозможно использовать для рисования составных линий, и оно не позволяет рисовать пунктирные линии с оконечными элементами Triangle.
myPen.Alignment = PenAlignment.Center;
Свойство Brush. Получает или задает объект Brush, определяющий атрибуты объекта Pen. Назначение этого свойства позволяет перу рисовать заполненные линии и кривые. Оно переопределяет свойство Color объекта Pen.
myPen.Brush = Brushes.Blue;
Рис. Результат работы свойства Brush
Свойство Color. Получает или задает цвет объекта Pen. Изменим цвет пера на красный при помощи этого свойства.
myPen.Color = Color.Red;
Рис. Результат работы свойства Color
Свойство CompoundArray. Получает или задает массив значений, определяющий составное перо. Составное перо рисует составную линию, состоящую из параллельных линий и разделяющих их промежутков.
Составная линия состоит из сменяющих друг друга параллельных линий и промежутков различной ширины. Значения массива задают начальные точки компонентов составной линии относительно ширины пера. Первое значение массива задает начало первого компонента (линии) по ширине пера и в долях от нее. Второе значение массива задает начало следующего компонента (пробела) по ширине пера и в долях от нее. Последнее значение массива задает окончание последнего компонента.
Предположим, что нужно создать перо, рисующее две параллельные линии. Первую линию толщиной 20% от ширины пера, пробел, разделяющий линии, — 50% от ширины пера, а вторую линию — 30% от ширины пера.
Для этого необходимо создать массив следующего вида.
float[] d = { 0.0F, 0.2F, 0.7F, 1F };
И присвоить его значение свойству CompoundArray.
myPen.CompoundArray = d;
В результате получим следующий обработчик события Form1_Paint.
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(Color.White);
Pen myPen = new Pen(Color.Black,10);
myPen.Color = Color.Red;
float[] d = { 0.0F, 0.2F, 0.7F, 1F };
myPen.CompoundArray = d;
g.DrawLine(myPen,10,50,200,50);
}
Результат работы свойства представлен на рис.
Рис. Результат работы свойства CompoundArray
Свойство Width. Получает или устанавливает ширину пера Pen, в единицах объекта Graphics, используемого для рисования.
myPen.Width = 5;
Свойство EndCap. Задает окончание линий, нарисованных при помощи объекта Pen. Этому свойству присваиваются значения из перечисления LineCap.
myPen.EndCap = LineCap.ArrowAnchor;
Это перечисление содержит следующие значения.
Flat - задает плоское завершение отрезка.
Square - задает квадратное завершение отрезка.
Round - задает круглое завершение отрезка.
Triangle - задает треугольное завершение отрезка.
NoAnchor - не задает маркер.
SquareAnchor - задает квадратный маркер завершения отрезка.
RoundAnchor - задает круглый маркер.
DiamondAnchor - задает маркер в форме ромба.
ArrowAnchor - задает маркер в форме стрелки.
Свойство StartCap. Задает начало линий, нарисованных при помощи объекта Pen. Этому свойству присваиваются значения из перечисления LineCap
myPen.StartCap = LineCap.DiamondAnchor;
Свойство DashCap. Получает или задает стиль окончания пунктиров, ограничивающих пунктирные линии, нарисованные при помощи объекта Pen. Свойству DashCap присваиваются одно из значений перечисления DashCap. Это перечисление содержит следующие значения для начала и окончания штриха: Flat(квадратное); Round(круглое); Triangle(треугольное).
Свойство DashOffset. Получает или задает расстояние от начала линии до начала штрихового шаблона.
Свойство DashPattern. Получает или задает массив настраиваемых штрихов и промежутков. Элементы массива dashArray задают длину всех штрихов и промежутков штрихового шаблона. Первый элемент задает длину штриха, второй — длину промежутка, третий — длину следующего штриха и так далее. Длина каждого штриха и промежутка штрихового шаблона вычисляется исходя из значения элемента массива и ширины объекта Pen.
float [] DashArray = {4.0F, 2.0F, 1.0F, 3.0F};
myPen.DashPattern = DashArray;
Свойство DashStyle. Получает или задает стиль, используемый для пунктирных линий, нарисованных при помощи объекта Pen. Значениями свойства является перечисление DashStyle, представляющее стиль, используемый для пунктирных линий, нарисованных при помощи объекта Pen. Это перечисление содержит следующие значения.
Solid - Задает сплошную линию.
Dash - Задает линию, состоящую из штрихов.
Dot - Задает линию, состоящую из точек.
DashDot - Задает штрих-пунктирную линию.
DashDotDot - Задает линию, состоящую из повторяющегося шаблона "штрих-две точки".
Custom - Задает пользовательский тип пунктирных линий.
Работа этого свойства выглядит следующим образом.
myPen.DashStyle = DashStyle.DashDotDot;
В результате получим следующий обработчик события Form1_Paint.
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(Color.White);
Pen myPen = new Pen(Color.Black);
myPen.Color = Color.Red;
myPen.Width = 5;
myPen.EndCap = LineCap.ArrowAnchor;
myPen.StartCap = LineCap.DiamondAnchor;
g.DrawLine(myPen, 10, 10, 200, 10);
float [] DashArray = {4.0F, 2.0F, 1.0F, 3.0F};
myPen.EndCap = LineCap.Flat;
myPen.StartCap = LineCap.Round;
myPen.DashCap = DashCap.Triangle;
myPen.DashPattern = DashArray;
g.DrawLine(myPen, 10, 20, 200, 20);
myPen.EndCap = LineCap.RoundAnchor;
myPen.StartCap = LineCap.Square;
myPen.DashStyle = DashStyle.DashDotDot;
g.DrawLine(myPen, 10, 30, 200, 30);
myPen.EndCap = LineCap.NoAnchor;
myPen.StartCap = LineCap.NoAnchor;
myPen.DashStyle = DashStyle.Dot;
g.DrawLine(myPen, 10, 40, 200, 40);
}
Рис. Результат работы обработчика события Form1_Paint