Файл: Лекция 7 Рисование Графики в С# Создание графических изображений состоит из двух этапов.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.11.2023

Просмотров: 105

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лекция №7

Рисование Графики в С#
Создание графических изображений состоит из двух этапов:

  1. Создание объекта класса Graphics.

  2. Рисования линий и фигур на объекте Graphics.


Класс Graphics для рисования
Перед тем как рисовать линии и фигуры, необходимо создать объект класса Graphics, который является поверхностью для рисования. Graphics – это класс имитации поверхности рисования.

Существует несколько способов создания объекта Graphics:

  1. С помощью события Paint можно рисовать на компонентах, для которых может быть создан обработчик события Paint

  2. С помощью метода CreateGraphics(), создающий объект Graphics, связанный с выводом графики на любой компонент. Это Наиболее универсальный способ.

Например 1:

Создаем объект gr класса Graphics с помощью метода CreateGraphics() и связываем его с компонентом panel1:

Graphics gr = panel1.CreateGraphics();//связываем область рисования с панелью и далее рисуем на панели:

gr.DrawLine(Pens.Green,10,10,300,10); //рисуем зеленую линию от точки (10, 10) до точки (300, 10).

gr.DrawEllipse(Pens.Red, 100, 150, 20, 20); //рисуем красный круг

Например 2:

Graphics g2 = button2.CreateGraphics();//связываем область рисования с кнопкой и далее рисуем на кнопке

g2.FillEllipse(Brushes.Green,80,90,30,50); рисуем зеленый эллипс
Методы класса Graphics
Имена большинства методов, класса Graphics, начинается с префикса Draw* и Fill*. Первые из них предназначены для рисования линий и не закрашенных фигур (таких, например, как прямоугольные рамки), а вторые — для рисования закрашенных геометрических фигур. Для всех методов первый параметр ( Pen) – это карандаш определяющий цвет и толщину линии. Как настраивать карандаш рассмотрим ниже.

Метод

Действие

;

DrawLine (Pen, x1, y1, x2, y2)

Прямая линия. Параметры x1, y1 – координаты начала линии, x2, y2 — координаты конца линии

DrawRectangle (Pen, x, y, w, h)

Контур прямоугольника. x, y — координаты левого верхнего угла; w – ширина прямоугольника, h высота прямоугольника

DrawEllipse(Pen, x, y, w, h)

Контур эллипса. параметры x, y, w, h — координаты левого верхнего угла и размер прямоугольника, внутри которого вписан эллипс

DrawPolygon(Pen, P)

Контур многоугольника. параметр P (массив типа Point) — координаты углов многоугольника




Для всех следующих методов Параметр Brush определяет цвет и стиль кисти для закраски ;

FillRectangle (Brush, x, y, w, h)

Рисует закрашенный прямоугольник. параметры x, y — координаты левого верхнего угла; параметры w и h задают размер прямоугольника

FillEllipse(Brush, x, y, w, h)

Рисует закрашенный эллипс. параметры x, y, w, h — координаты левого верхнего угла и размер прямоугольника, внутри которого вычерчивается эллипс

FillPolygon(Brush, P)

Рисует закрашенный многоугольник. параметр P (массив типа Point) — координаты углов многоугольника

gr.DrawArc(Pens.Black, 35, 100, 25, 25, 70, 220); дуга эллипса


DrawString(st, aFont, aBrush, x, y);


Вывод текста на графическую поверхность Параметр st задает текст, параметр aFont — шрифт, который используется для отображения текста, a aBrush — цвет текста. Параметры x и y определяют координаты левого верхнего угла области отображения текста

DrawImage(Image, x, y)

Выводит на графическую поверхность иллюстрацию. Параметр Image определяет иллюстрацию; x и y — координату левого верхнего угла области вывода иллюстрации


Например:
private void button1_Click(object sender, EventArgs e)

{

Graphics gr = panel1.CreateGraphics();//связываем область рисования с панелью и далее рисуем на панели:

gr.DrawLine(Pens.Green,10,10,300,10); //рисуем зеленую линию из точки (10, 10) в точку (300, 10).

gr.DrawEllipse(Pens.Red, 100, 150, 20, 20); //рисуем красный круг

gr.FillEllipse(Brushes.Green,80,90,30,50); рисуем зеленый эллипс

}
Карандаш

Карандаш определяет вид линии — цвет, толщину и стиль. Существует стандартный набор карандашей, а можно создавать свои. Приведем список карандашей из стандартного набора.

Некоторые карандаши из стандартного набора

Карандаш

Цвет




Карандаш

Цвет

Pens.Red

Красный




Pens.Purple

Пурпурный

Pens.Orange

Оранжевый




Pens.Black

Черный

Pens.Yellow

Желтый




Pens.LightGray

Серый

Pens.Green

Зеленый




Pens.White

Белый

Pens.LightBlue

Голубой




Pens.Transparent

Прозрачный

Pens.Blue

Синий











Например, метод DrawLine(Pens.Black, 10,20, 100,20); рисует линию, используя черный (Black) карандаш из стандартного набора карандашей (Pens)толщиной в 1 пиксел.
Цвет, толщину и стиль карандаша, можно изменить. Для этого нужно создать собственный нестандартный карандаш – объект класса Pen, и установить значения соответствующих свойств.
// создать красный "толстый" карандаш myPen

Pen myPen = new Pen(Color.Red, 2); //толщина карандаша=2

// теперь сделаем изменим карандаш myPen и сделаем его зеленым и толщиной 4 пиксела

myPen.Color = Color.Green;

myPen.Width = 4;

Как вы уже поняли:

свойство Color задает Цвет линии

свойство Width задает Толщину линии в пикселах

Стиль карандаша (пунктир) также можно изменить. Чтобы это сделать, надо изменить значение свойства DashStyle. По умолчанию значение этого свойства DashStyle.Solid — что означает сплошная линия;
Можно задать значение DashStyle.Dash — тогда будет пунктирная линия с длинными штрихами;

Например:

// пунктирнаялиния

Pen Pen2 = new Pen(Color.Purple, 3);

Pen2.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
Еще варианты:

DashStyle.Dot — пунктирная линия с короткими штрихами;

DashStyle.DashDot — пунктирная линия, чередование длинного и короткого штрихов;

DashStyle.DashDotDot — пунктирная линия, чередование одного длинного и двух коротких штрихов;
private void button1_Click(object sender, EventArgs e)

{

Graphics gr = panel1.CreateGraphics();//связываем область рисования с панелью

Pen Pen2 = new Pen(Color.Purple, 3); // создаемсвойкарандаш

// пурпурного цвета в 3 пиксела, делаем его пунктирным:

Pen2.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
gr.DrawLine( Реn2,10,10,300,10); //рисуемпунктирнуюлиниюиз точки (10, 10) в точку (300, 10).

gr.DrawEllipse(Реn2, 100, 150, 20, 20); //рисуем пунктирный круг

}
Кисть

Кисти используются для закраски внутренних областей геометрических фигур.

Например, операор

gr.FillRectangle(Brushes.Blue, x, y, w, h);рисует синий закрашенный прямоугольник.

В приведенном примере Brushes.Blue — это стандартная кисть синего цвета. Параметры x, y определяют положение прямоугольника; w, h — его размер.

В распоряжении программиста есть три типа кистей: стандартные, штриховые и текстурные.

Стандартная кисть закрашивает область одним цветом (сплошная закраска).

Кисть

Цвет

Кисть

Цвет

Brushes.Red

Красный

Brushes.Blue

Синий

Brushes.Orange

Оранжевый

Brushes.Purple

Пурпурный

Brushes.Yellow

Желтый

Brushes.Black

Черный

Brushes.Green

Зеленый

Brushes.LightGray

Серый

Brushes.LightBlue

Голубой

Brushes.White

Белый


Для создания объекта «кисть» используются классы, производные от Brush, такие как SolidBrushTextureBrush и LinearGradientBrush,  например:

SolidBrush br = new SolidBrush(Color.Aqua);
g.FillRectangle(br, r); // закраска прямоугольника на «холсте» g

Derived

System.Drawing.SolidBrush

System.Drawing.TextureBrush

System.Drawing.Drawing2D.HatchBrush

System.Drawing.Drawing2D.LinearGradientBrush

System.Drawing.Drawing2D.PathGradientBrush

System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);

Необязательная информация

Штриховая кисть (HatchBrush) закрашивает область путем штриховки. Область может быть заштрихована горизонтальными, вертикальными или наклонными линиями разного стиля и толщины. В табл. 4.5 перечислены некоторые из возможных стилей штриховки.

Таблица 4.5. Некоторые стили штриховки областей

Стиль

Штриховка

HatchStyle.LightHorizontal

Редкая горизонтальная

HatchStyle.Horizontal

Средняя горизонтальная

HatchStyle.NarrowHorizontal

Частая горизонтальная

HatchStyle.LightVertical

Редкая вертикальная

HatchStyle.Vertical

Средняя вертикальная

HatchStyle.NarrowVertical

Частая вертикальная

HatchStyle.LageGrid

Крупная сетка из горизонтальных и вертикальных линий

HatchStyle.SmallGrid

Мелкая сетка из горизонтальных и вертикальных линий

HatchStyle.DottedGrid

Сетка из горизонтальных и вертикальных линий, составленных из точек

HatchStyle.ForwardDiagonal

Диагональная штриховка "вперед"

HatchStyle.BackwardDiagonal

Диагональная штриховка "назад"

HatchStyle.Percent05 — HatchStyle.Percent90

Точки (степень заполнения 5%, 10%, ..., 90%)


Пример:
private void pictureBox1_Paint(object sender, PaintEventArgs e)

{

// штриховка (

Drawing2D.HatchBrush myBrush;// объявление штриховой кисти

myBrush = new Drawing2D.HatchBrush( HatchStyle.DottedGrid,// стиль штриховки

Color.Black, // цвет штрихов


Color.SkyBlue); // цвет фона

gr.FillRectangle(myBrush, 10, 10, 190, 160);

}
Текстурную кисть разобрать самостоятельно
Пример :

namespace рисование_круга

{

public partial class Form1 : Form

{

Graphics gr;

int y = 0;

public Form1()

{

InitializeComponent();

gr = panel1.CreateGraphics();//связываемобластьрисованияс panel

}

private void button1_Click (object sender, EventArgs e)

{

gr.DrawEllipse(Pens.Purple,2,2,100,100); // окружность

gr.FillEllipse(Brushes.Red, 80, 50, 80, 100); //закрашенныйэллипс

}
p rivate void button2_Click (object sender, EventArgs e)

{ int x=0;

for (int i = 1; i <= 10; i++)// 10 шт. окружностей наискосок и с увеличением радиуса

{ gr.FillEllipse(Brushes.Aqua, 2+3*x, 2+2*x, 20+x/2, 20+x/2);

x = x + 10;

}

}

Другой способ , через событие Paint

СОЗДАНИЕ ОБЪЕКТА Graphics через Событие Paint

private void pictureBox1_Paint(object sender, PaintEventArgs e)

{

e.Graphics.DrawLine(Pens.Green,10,10,300,10);

e.Graphics.DrawEllipse(Pens.Red, 10, 5, 100, 100);

e.Graphics.FillEllipse(Brushes.Aqua, 30, 40, 200, 100);

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

e.Graphics.DrawLine(new Pen(Color.Red, 2), 0, 0, 100, 100);

}

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

private void button1_Paint(object sender, PaintEventArgs e)

{

e.Graphics.DrawLine(new Pen(Color.Red, 2), 0, 0, 200, 300); //накнопке

}
ИСПОЛЬЗОВАНИЕ ГРАФИКИ И АНИМАЦИИ С ТАЙМЕРОМ

Пример 1: Нарисуем Эллипс, передвигающийся по наклонной линии.

Опишем по шагам пример создания анимации:

  1. Разместим на форме компонент timer1 –для отсчета интервалов времени. Свойство Interval – зададим =50

  2. Объявим глобальную переменную int y = 0; в начале программы

public partial class Form1 : Form

{

int y = 0;

public Form1()

{

InitializeComponent();

}

2) Сделаем двойной щелчок по таймеру, добавленному на форму

3) В процедуре обработчика событий timer1_Tick напишем следующий текст:
private void timer1_Tick(object sender, EventArgs e)

{//связываем область рисования с панелью

Graphics gr = panel1.CreateGraphics();

//заливаем всю панель цветом фона что бы стереть предыдущий эллипс

gr.FillRectangle(Brushes.White, 0, 0, 1000, 1000);

//или лучше:gr.FillRectangle(Brushes.White, 0, 0, panel1.Width, panel1.Height);

// рисуем эллипс со смещением через каждые 50 миллисекунд=Interval

gr.FillEllipse(Brushes.Red, 1+3*y, 20+y, 50, 30);

y = y + 20; - смещаем координаты центра эллипса

}

private void button3_Click(object sender, EventArgs e)