Приложение Windows Forms:
простая графика
Программа помещает на форме рисунок, хранящийся в файле, эллипс, текст и текст в рамке. (Другие кадры этого фильма см
здесь)
Текст программы (текст модуля Form1.cs)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace my6Graphics
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Bitmap bm2 = new Bitmap(@".\kadr4.JPG", true);
Color clr1, clr2;
clr1 = Color.FromArgb(200, 220, 220);
clr2 = Color.FromArgb(254, 0, 0);
Graphics gr1 = CreateGraphics();
gr1.Clear(clr1);
gr1.DrawImage(bm2, new PointF(10, 10));
Pen pn1 = new Pen(clr2);
pn1.Width = 4;
gr1.DrawEllipse(pn1, 20, 80, 200, 100);
pn1.Dispose();
Font font1 = new Font("Arial", 12);
gr1.DrawString("Arial Font", font1, Brushes.White,
new PointF(50, 110));
String drawString = "Sample Text";
// Create font and brush.
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.White);
SolidBrush fillBrush = new SolidBrush(Color.Green);
// Create rectangle for drawing.
float x = 150; // 150.0F
float y = 200;
float width = 200;
float height = 50;
RectangleF drawRect = new RectangleF(x, y, width, height);
// Draw rectangle to screen.
Pen blackPen = new Pen(Color.Yellow);
blackPen.Width = 3;
gr1.DrawRectangle(blackPen, x, y, width, height);
gr1.FillRectangle(fillBrush, drawRect);
// Draw string to screen.
gr1.DrawString(drawString, drawFont, drawBrush, drawRect);
gr1.Dispose();
}
}
}
Обсуждение
- Все действия выполняются в методе Form1_Paint - обработчике события OnPaint формы. Этот метод вызывается, когда нужно перерисовать форму, т е при первом показе формы, изменении её размеров, при ликвидации препятствия, закрывавшего всю или часть формы и т п.
- Рассмотрим код этого метода построчно, сверху - вниз
- Bitmap bm2 = new Bitmap(@".\kadr4.JPG", true); - создаётся переменная (объект) bm2 класса Bitmap. При этом в неё загружается картинка, находящаяся в файле kadr4.JPG той папки, где исполняемый файл (в данном случае D:\XRAN_MY_PROGS\0_vis_stud\my0_7_2Graphics\bin\Debug\). Символ @ перед строкой указывает, что обратный слэш \ в этой строке не является специальным форматирующим символом (а является обычным элементом строки). Символы .\ обозначают текущую папку. Возможно, правильнее получить имя этой папки из свойства System.Windows.Forms.Application.StartupPath
- Color clr1, clr2; - Объявляются переменые clr1, clr2 класса Color
- clr1 = Color.FromArgb(200, 220, 220); - переменной clr1 присваивается конкретный цвет (яркость красного = 200, зелёного = 220, синего - 220)
- clr2 = Color.FromArgb(254, 0, 0); - аналогично: переменной clr2 присваивается ярко-красный цвет
- Graphics gr1 = CreateGraphics() - можно было написать Graphics gr1 = Form1.CreateGraphics(). Создаётся переменная gr1 класса Graphics, причём она связана с поверхностью формы Form1.
- gr1.Clear(clr1) - очищаю окно формы (заливаю фоновым цветом clr1, используя метод Clear объекта
gr1)
- gr1.DrawImage(bm2, new PointF(10, 10)) - картинка, хранящаяся в объекте bm2 помещается на форму с помощью метода DrawImage объекта gr1. (Для этого не обязательно использовать объект класса Bitmap, можно например, объект класса Image)
- Pen pn1 = new Pen(clr2) - создаю перо (объект pn1 класса Pen), необходимое для вычерчивания эллипса
- pn1.Width = 4 - устанавливаю ширину пера (толщину линии) = 4
- gr1.DrawEllipse(pn1, 20, 80, 200, 100) - вычерчиваю эллипс, вписанный в прямоугольник с координатами
левого верхнего угла: x=20, y=80, шириной w=200, высотой h=100 пером pn1
- pn1.Dispose() - удаляю объект pn1. Это не обязательно, так как его автоматически удалит сборщик мусора
- Font font1 = new Font("Arial", 12) - создаётся объект font1 класса Font (шрифт): Arial, размер 12pt. Однако можно обойтись без font1. В этом случае следующая строка должна выглядеть так:
gr1.DrawString("Arial Font", new Font("Arial", 12), Brushes.White, new PointF(50, 110));
- gr1.DrawString("Arial Font", font1, Brushes.White, new PointF(50, 110)) - вывожу строку "Arial Font" шрифтом font1 белым (Brushes.White) цветом, причём левый верхний угол строки имеет координаты: x=50, y=110
- String drawString = "Sample Text" - объявляю переменную drawString класса String и присваиваю ей значение Sample Text
- Font drawFont = new Font("Arial", 16) - создаю объект drawFont класса Font (шрифт) размером 16pt, Arial
- SolidBrush drawBrush = new SolidBrush(Color.White) - создаю объект drawBrush класса SolidBrush ("кисть для сплошных линий") белого цвета (Color.White)
- SolidBrush fillBrush = new SolidBrush(Color.Green) - аналогично, кисть fillBrush зелёного цвета
- float x = 150; float y = 200; float width = 200; float height = 50; - описаны переменные x,y - координаты верхнего левого угла прямоугольника; width, height - его ширина и высота. Заданы значения этих переменных.
- RectangleF drawRect = new RectangleF(x, y, width, height) - создаю объект drawRect класса RectangleF (прямоугольник) с параметрами, указанными в предыдущем пункте
- Pen blackPen = new Pen(Color.Yellow) - создаю объект blackPen класса Pen (перо) желтого цвета (Color.Yellow)
- blackPen.Width = 3 - задаю: толщина линий этого пера = 3 пиксела
- gr1.DrawRectangle(blackPen, x, y, width, height) - рисую на поверхности формы заданный прямоугольник заданным пером (то есть желтую рамку толщиной 3 пиксела)
- gr1.FillRectangle(fillBrush, drawRect) - заливаю этот же прямоугольник внутри цветом fillBrush, т е зелёным
- gr1.DrawString(drawString, drawFont, drawBrush, drawRect) - помещаю на форму строку drawString (т е Sample Text) написанную шрифтом drawFont (т е Arial, 16pt ), цветом drawBrush (т е белым), внутри прямоугольника drawRect
Примечания
- Можно сделать вывод, что для разработки программ необходимо ориентироваться в свойствах и методах классов
- Рассмотрим, например, какие нужные для этой программы классы находятся в пространстве имён System.Drawing. Для этого в редакторе кода запишем такой комментарий:
// System.Drawing затем выделим System.Drawing и нажмём клавишу F1. (Справочная система должна быть налажена). Увидим классы (и структуры): Bitmap, Color, Font, Graphics, Pen, PointF, Rectangle, RectangleF,
SolidBrush - то есть всё необходимое для программы. Щёлкнув далее, например - Color, увидим описание этой структура и ссылки, по которым можно увидеть её свойства и методы.
- В рамках этой программы классы и структуры - одно и то же. Подробнее см в учебниках.