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

В пространстве имен 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);

}

}

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