В пространстве имен 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
Открытый метод структуры:
public void Offset( int dx, int dy ); изменяет текущие координаты точки по формулам: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);
}
}
Скомпилируйте приложение. Проанализируйте полученные результаты.