Простейшие графические возможности

В пространстве имен System.Drawing − определены основные структуры для представления:

· точки (координат) − Point и PointF

· размера − Size и SizeF

· прямоугольных областей − Rectangle и RectangleF.

Буква F в конце названия структуры означает, что, в отличие от обычных структур (без F), поля структуры имеют не целочисленные значения, а значения вещественного типа (float).

 

 

Структура Size

 

Структура Size предназначена для хранения ширины и высоты объекта и имеет, для этого, соответствующие открытые свойства Width и Height, доступные как для записи, так и для чтения. При создании объекта Size, с помощью конструктора по умолчанию:

 

Size sz = new Size();

 

свойства Width и Height устанавливаются в ноль.

Изменить значения свойств в последствии можно, например, следующим образом:

sz.Width = 40;

sz.Height = 60;

Структура содержит два конструктора с аргументами:

public Size(int, int);

public Size(Point);

Конструкторы с аргументами позволяют, в момент создания, инициализировать разные экземпляры структуры по-разному:

Size sz1= new Size(10,20); // sz1.Width = 10, sz1.Height = 20 Size sz2 = new Size(15,50); // sz2.Width = 15, sz2.Height = 50

Структура Point

Структура Point содержит открытые свойства X и Y целого типа, доступные, как для записи, так и для чтения.

Для создания точки “pt” можно использовать конструктор по умолчанию:

 

Point pt = new Point();

Конструктор по умолчанию при создании точки обнуляет значения свойств X и Y.

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

pt.X =25;

pt.Y=75;

Инициализировать новую точку класса Point, можно используя,

конструкторы с аргументами:

 

public Point(Size);

public Point(int, int);

 

Например:

 

Point pt1 = new Point(10,20); // pt1.X =10, pt1.Y=20

Size sz = new Size(27,45);

Point pt2 = new Point(sz); // pt2.X=27, pt2.Y=45

 

Открытый метод структуры:

 

publicvoidOffset(intdx,intdy);изменяет текущие координаты точки по формулам:X=X+dx и Y=Y+dy;

Структура Rectangle

 

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

В структуре определены два конструктора с аргументами:

public Rectangle(

int x, // x-координата левого верхнего угла прямоугольника

int y, // y-координата левого верхнего угла прямоугольника

int width, // ширина прямоугольника

int height // высота прямоугольника

);

 

public Rectangle(

Point location, // координата левого верхнего угла прямоугольника

Size size // размер прямоугольника

);

 

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

 

Point pt = new Point(10,15);

Size sz = new Size (50,70);

Rectangle rct = new Rectangle(pt,sz);

Rectangle rect = new Rectangle(20,20,50,30);

 

Структура Rectangle содержит ряд доступных методов. Рассмотрим некоторые из них.

Метод:

public void Intersect(Rectangle);

 

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

Например:

 

Rectangle rect,rct;

rect = new Rectangle(20,25,50,55);

rct = new Rectangle(10,10,30,40);

rect.Intersect(rct);

 

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

 

X=20, Y=25, Width=20, Height=25.

 

Метод:

 

public static Rectangle Union( Rectangle a, Rectangle b);

 

Возвращает структуру, описывающий минимальный по размерам прямоугольник, включающий в себя прямоугольники a и b.

Методы public void Offset(Point pos) и public void Offset( int x, int y) смещают координаты левой верхней точки прямоугольника по обеим осям на величину, задаваемую параметрами методов.

 

 

Представление цвета

 

Представление цвета осуществляется с помощью экземпляров структуры System.Drawing.Color.

Для задания цвета используется статический метод класса:

 

public static Color.FromArgb( int red, int green, int blue);

 

Параметры метода red, green и blue задают интенсивность красной, зеленой и синей составляющей цвета. Значение каждой компоненты цвета может изменяться в диапазоне от 0 до 255. Это позволяет отобразить 224 различных цветов.

Для задания цвета можно также использовать один из перегруженных методов FromArgb:

 

public static Color FromArgb(int alpha, Color cr);

public static Color FromArgb(int alpha, int red, int green, int blue);

 

Дополнительный параметр alpha задает степень прозрачности цвета. Чем меньше это число, тем меньше насыщенность цвета и тем более прозрачным является этот цвет. Значение параметра alpha может изменяться в диапазоне от 0 до 255. Значение 0 определяет полностью прозрачный (бесцветный), а значение 255 − полностью насыщенный (непрозрачный) цвет.

Структура Color содержит более 200 статических свойств, доступных только для чтения. Эти свойства задают именованные или, так называемые, Интернет − цвета, которые правильно воспроизводятся всеми WEB браузерами.

Например:

Color clr2 = Color.Beige; // бежевый

Color clr3 = Color.Magenta; // сиреневый

Color clr4 = Color.Orange; // оранжевый

Кисти и перья

 

 

Графические объекты рисуются с помощью перьев и кистей.

Сплошные кисти создаются как экземпляры класса System.Drawing.SolidBrush, например:

Brush br2 = new SolidBrush(Color.Magenta);

Brush br3 = new SolidBrush(Color.FromArgb(200,10,120));

 

Параметр color конструктора public SolidBrush(Color color)

класса SolidBrush задает цвет сплошной кисти.

В классе System.Drawing.Brushes определено большое количество статических свойств, возвращающих кисть Интернет цветов. Создание таких кистей выглядит следующим образом:

 

Brush brr = Brushes.Orange;

 

В классе System.Drawing.Drawing2D.HatchBrush определены штриховые кисти.

Конструкторы класса:

 

public HatchBrush(HatchStyle hatchstyle, Color foreColor, Color backColor);

public HatchBrush(HatchStyle hatchstyle, Color foreColor);

 

Параметры:

 

foreColor − цвет штриха кисти;

backColor − цвет фонового штриха кисти (по умолчанию − черный цвет);

hatchstyle − стиль штриховой кисти.

 

Существует большое количество доступных стилей, наиболее типичными являются:

 

Cross − решетчатая кисть;

DiagonalCross − диагональная решетчатая кисть;

Horizontal − горизонтальная штриховка;

Vertical − вертикальная штриховка.

 

Например, создание кисти с вертикальной штриховкой синего цвета и фоновым штрихом бежевого цвета будет выглядеть следующим образом:

 

Brush br1 = new HatchBrush(HatchStyle.Vertical,Color.Blue,Color.Beige);

 

Перья описываются классом System.Drawing.Pen.

Конструкторы класса:

 

public Pen(Color color);

public Pen(Color color, float width);

public Pen( Brush brush);

public Pen(Brush brush, float width);

 

Параметры:

 

color − цвет пера;

width − толщина пера;

brush −кисть.

 

Примеры создания перьев:

 

Pen pn = new Pen(Color. Magenta);

Pen pn1 = new Pen(Color.Orange,5);

Pen pn2 = new Pen(Brushes.Orange);

Pen pn3 = new Pen(Brushes.Magenta,10);

Pen pn4 = new Pen(Color.FromArgb(125,155, 0));

Pen pn5 = new Pen(Color.FromArgb(25,155,200),10);

 

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

 

Pen pn6 = Pens.Brown;

Pen pn7 = Pens.Magenta;

 

 

Рисование линий и фигур

 

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

Контекст устройства в среде .NET инкапсулирован («завернут») в базовом классе System.Drawing.Graphics. Для создания объекта класса Graphics необходимо использовать метод CreateGraphics(), возвращающий ссылку на объект класса Graphics:

 

Graphics dc = CreateGraphics();

 

Полученный объект dc содержит контекст устройства, позволяющий осуществлять вывод информации в окно приложения.

Класс Graphics содержит множество методов, позволяющих рисовать различные графические фигуры. Рассмотрим некоторые из них.

Рисование контуров прямоугольников осуществляется с помощью методов:

 

public void DrawRectangle( Pen pen, Rectangle rect);

public void DrawRectangle( Pen pen, int x, int y, int width, int height);

public void DrawRectangle( Pen pen, float x, float y, float width, float height);

 

Рисование контуров эллипсов осуществляется с помощью методов:

 

public void DrawEllipse ( Pen pen, Rectangle rect);

public void DrawEllipse ( Pen pen, int x, int y, int width, int height);

public void DrawEllipse ( Pen pen, float x, float y, float width, float height);

 

Рисование закрашенных эллипсов и прямоугольников осуществляется с помощью методов:

 

public void FillEllipse( Brush brush, Rectangle rect);

public void FillEllipse( Brush brush, int x, int y, int width, int height);

public void FillEllipse( Brush brush, float x, float y, float width, float height);

public void FillRectangle( Brush brush, Rectangle rect);

public void FillRectangle( Brush brush, int x, int y, int width, int height);

public void FillRectangle( Brush brush, float x, float y, float width, float height);

 

Параметры методов означают следующее:

pen − перо;

brush − кисть;

rect − прямоугольник;

х − координата х левого верхнего угла прямоугольника;

y − координата у левого верхнего угла прямоугольника;

width − ширина прямоугольника;

height −высота прямоугольника;

 

Рисование линий осуществляется с помощью перегруженных методов:

 

public void DrawLine(Pen pen, Point pt1, Point pt2);

public void DrawLine(Pen pen, PointF pt1, PointF pt2);

public void DrawLine(Pen pen, int x1, int y1, int x2, int y2);

public void DrawLine(Pen pen, float x1, float y1, float x2, float y2);

 

Параметры методов означают следующее:

pen − перо;

pt1 − начальная точка рисования;

pt2 − конечная точка рисования;

х1 и у1 − координаты начальной точки рисования;

х2 и у2 − координаты конечной точки рисования;

 

Примеры использоания функций:

 

dc.DrawRectangle(Pens.OrangeRed,5,10,25,45);

dc.DrawEllipse(Pens.Magenta,100,125,20,15);

dc.FillEllipse(Brushes.BlueViolet,45,50,20,15);

dc.DrawLine(Pens.Green,20,40,60,70);

Рисование текста

 

Для рисования текста используют перегруженный метод DrawString. Рассмотрим два из шести перегруженных методов DrawString:

public void DrawString(string s, Font fnt, Brush br, PointF pt);

public void DrawString(string s, Font fnt, Brush br, RectangleF ltRct);

Параметры:

s –строка символов,

fnt – шрифт текста,

br – кисть,

pt – точка, определяющая координаты вывода текста,

ltRct – прямоугольник, внутри которого выводится текст, если же текст не вмещается в область прямоугольника, то он (текст) обрезается.

Например:

Font fnt = new Font("Arial",10); //Шрифт Arial, размер 10

dc.DrawString("Привет!",fnt, Brushes.Green,10,20);

 

Пример 1. Создадим приложение, которое при щелчке левой кнопкой мыши на окне приложения выводит в месте щелчка прямоугольник с текстом координатами левого верхнего угла прямоугольника, а при щелчке правой кнопкой мыши в месте щелчка выводится закрашенный эллипс.

Для этого создайте проект Windows Application. В окне свойств формы выбрать событие MouseDown, дважды щелкнуть на названии события мышкой. В появившейся заготовке метода-обработчика события вставить код, чтобы тело метода выглядело следующим образом:

 

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

Graphics dc = CreateGraphics();

Font fnt = new Font("Coyrier",10);

if(e.Button.ToString()== "Left")

{

dc.DrawRectangle(Pens.OrangeRed,e.X,e.Y,15,15);

dc.DrawString("X="+e.X.ToString()+" Y="+e.Y.ToString(),fnt,Brushes.Green,e.X,e.Y+20);

}

if(e.Button.ToString()== "Right")

{

dc.DrawEllipse(Pens.Magenta,e.X,e.Y,20,15);

dc.FillEllipse(Brushes.Blue,e.X,e.Y,20,15);

}

}

Скомпилируйте приложение. Проанализируйте полученные результаты.