Файл: Лекция 7 Рисование Графики в С# Создание графических изображений состоит из двух этапов.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.11.2023
Просмотров: 212
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лекция №7Рисование Графики в С#Создание графических изображений состоит из двух этапов:
gr.DrawArc(Pens.Black, 35, 100, 25, 25, 70, 220); дуга эллипса
Например: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); рисуем зеленый эллипс}КарандашКарандаш определяет вид линии — цвет, толщину и стиль. Существует стандартный набор карандашей, а можно создавать свои. Приведем список карандашей из стандартного набора.
Например, метод DrawLine(Pens.Black, 10,20, 100,20); рисует линию, используя черный (Black) карандаш из стандартного набора карандашей (Pens)толщиной в 1 пиксел.Цвет, толщину и стиль карандаша, можно изменить. Для этого нужно создать собственный нестандартный карандаш – объект класса Pen, и установить значения соответствующих свойств. // создать красный "толстый" карандаш myPenPen 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 — его размер. В распоряжении программиста есть три типа кистей: стандартные, штриховые и текстурные. Стандартная кисть закрашивает область одним цветом (сплошная закраска).
Для создания объекта «кисть» используются классы, производные от Brush, такие как SolidBrush, TextureBrush и LinearGradientBrush, например:SolidBrush br = new SolidBrush(Color.Aqua);g.FillRectangle(br, r); // закраска прямоугольника r на «холсте» gDerivedSystem.Drawing.SolidBrushSystem.Drawing.TextureBrushSystem.Drawing.Drawing2D.HatchBrushSystem.Drawing.Drawing2D.LinearGradientBrushSystem.Drawing.Drawing2D.PathGradientBrushSystem.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);Необязательная информацияШтриховая кисть (HatchBrush) закрашивает область путем штриховки. Область может быть заштрихована горизонтальными, вертикальными или наклонными линиями разного стиля и толщины. В табл. 4.5 перечислены некоторые из возможных стилей штриховки. Таблица 4.5. Некоторые стили штриховки областей
Пример: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 через Событие Paintprivate 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);}можно рисовать на кнопке и на других компонентах, для которых может быть создан обработчик события Paintprivate void button1_Paint(object sender, PaintEventArgs e){e.Graphics.DrawLine(new Pen(Color.Red, 2), 0, 0, 200, 300); //накнопке}ИСПОЛЬЗОВАНИЕ ГРАФИКИ И АНИМАЦИИ С ТАЙМЕРОМПример 1: Нарисуем Эллипс, передвигающийся по наклонной линии. Опишем по шагам пример создания анимации:
-
Создание объекта класса Graphics. -
Рисования линий и фигур на объекте Graphics.
-
С помощью события Paint можно рисовать на компонентах, для которых может быть создан обработчик события Paint -
С помощью метода CreateGraphics(), создающий объект Graphics, связанный с выводом графики на любой компонент. Это Наиболее универсальный способ.
| Метод | Действие | |
| ; | ||
| 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) — координаты углов многоугольника |
| DrawString(st, aFont, aBrush, x, y); | Вывод текста на графическую поверхность Параметр st задает текст, параметр aFont — шрифт, который используется для отображения текста, a aBrush — цвет текста. Параметры x и y определяют координаты левого верхнего угла области отображения текста |
| DrawImage(Image, x, y) | Выводит на графическую поверхность иллюстрацию. Параметр Image определяет иллюстрацию; x и y — координату левого верхнего угла области вывода иллюстрации |
| Некоторые карандаши из стандартного набора | ||||
| Карандаш | Цвет | | Карандаш | Цвет |
| 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, и установить значения соответствующих свойств. // создать красный "толстый" карандаш myPenPen 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, такие как SolidBrush, TextureBrush и LinearGradientBrush, например:SolidBrush br = new SolidBrush(Color.Aqua);g.FillRectangle(br, r); // закраска прямоугольника r на «холсте» gDerivedSystem.Drawing.SolidBrushSystem.Drawing.TextureBrushSystem.Drawing.Drawing2D.HatchBrushSystem.Drawing.Drawing2D.LinearGradientBrushSystem.Drawing.Drawing2D.PathGradientBrushSystem.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%) |
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 через Событие Paintprivate 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);}можно рисовать на кнопке и на других компонентах, для которых может быть создан обработчик события Paintprivate void button1_Paint(object sender, PaintEventArgs e){e.Graphics.DrawLine(new Pen(Color.Red, 2), 0, 0, 200, 300); //накнопке}ИСПОЛЬЗОВАНИЕ ГРАФИКИ И АНИМАЦИИ С ТАЙМЕРОМПример 1: Нарисуем Эллипс, передвигающийся по наклонной линии. Опишем по шагам пример создания анимации:
-
Разместим на форме компонент timer1 –для отсчета интервалов времени. Свойство Interval – зададим =50 -
Объявим глобальную переменную int y = 0; в начале программы