Private void ColorDlgForm_MouseUp(object sender, MouseEventArgs e)




РАБОТА С ГРАФИКОЙ

 

GDI + (Graphic Device Interface + — Интерфейс Графических Устройств) — это подсистема Microsoft Windows XP, обеспечивающая вывод графической информации на экраны и принтеры. GDI+ является преемником GDI, интерфейса графических устройств, включаемого в ранние версии Windows. Интерфейс GDI+ изолирует приложение от особенностей конкретного графического оборудования. Такая изоляция позволяет разработчикам создавать аппаратно-независимые приложения.

 

Класс Graphics

Класс Graphics - это основной класс, необходимый для рисования. Класс Graphics, так же, как и другие рассматриваемые здесь классы для перьев и кистей, находятся в пространстве имен Drawing, хотя классы некоторых кистей вложены в подпространство Drawing2D.

Объекты этого класса зависят от контекста устройства, (графика не обязательно отображается на дисплее компьютера, она может выводиться на принтер, графопостроитель или другие устройства). Графический контекст C# представляет собой поверхность, обеспечивающую вывод графики на устройство.

При рисовании в формах можно объявить в форме поле, описывающее объект класса Graphics: Graphics gr;

а в конструкторе формы произвести связывание с реальным объектом:

gr = CreateGraphics();

Затем всюду в программе, где нужно работать с графикой, используется глобальный для формы объект gr и его методы. Есть другой способ получения этого объекта - обработчики некоторых событий получают объект класса Graphics среди передаваемых им аргументов. Например, в обработчике события Paint, занимающегося перерисовкой, этот объект можно получить так:

Protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)

{

Graphics gr = e.Graphics;

//перерисовка, использующая методы объекта gr

}

 

РАБОТА С ЦВЕТОМ

Для работы с цветом следует использовать структуру Color, определяющую методы и константы, используемые для манипуляций с цветом. Эта структура позволяет задать цвет в системе ARGB (aplha-red-green-blue, альфа-канал (отвечающий за прозрачность) — красный — зеленый —синий). Чаще всего для выбора цвета используются статические свойства этой структуры, которые возвращают объект типа Color. Все четыре компонента ARGB являются байтами, представляющими целые числа от 0 до 255. Альфа-значение определяет непрозрачность цвета. Если значение альфа равно нулю, то цвет становится прозрачным, если значение альфа равно 255 – становится насыщенный цвет. Значения альфа между 0 и 255 дают взвешенный эффект совмещения RGB –значения цвета со значением любого фонового цвета, делая цвет полупрозрачным. Если значение прозрачности не указано, то по умолчанию задается значение альфа, равное 255.

Некоторые предварительно определенные константы структуры Color и их значения RGB:

Orange (оранжевый) 255, 200, 0 White (белый) 255, 255, 255

Pink (розовый) 255, 175, 175 Gray (серый) 128.128.128

Cyan (голубой) 0, 255, 255 DarkGray (темно-серый) 64, 64, 64

Magenta (пурпурный) 255, 0,255 Red (красный) 255, 0, 0

Yellow (желтый) 255, 255, 0 Green (зеленый) 0, 255, 0

Black (черный) 0,0,0 Blue (синий) 0,0,255

 

Возможности класса ColorDialog

В пространстве имен System.Windows.Forms предусмотрен заранее готовый класс ColorDi alog, который обеспечивает пользователей приложения диалоговым окном

для выбора цвета.

Работа с классом ColorDialog производится очень просто. Первое, что нужно сделать - создать объект этого класса в программе. Затем, чтобы открыть диалоговое окно для пользователя, воспользуемся методом ShowDialog(). После того как пользователь сделает выбор, получить объект Color (соответствующий сделанному выбору) можно с помощью свойства ColorDialog.Color.

Например, предположим, что мы хотим обеспечить пользователю возможность выбирать при помощи этого диалогового окна цвет фона главной формы приложения. Чтобы упростить нашу задачу, сделаем так, чтобы диалоговое окно выбора цвета открывалось по щелчку мыши в любом месте клиентской части формы(листинг 1).

 

Листинг 1. Изменение цвета фона формы при щелчке мышкой в любом месте формы.

Namespace ColorDlg

{

Public partial class ColorDlgForm: Form

{

private System.Windows.Forms.ColorDialog colorDlg;

Public ColorDlgForm()

{

colorDlg = new System.Windows.Forms.ColorDialog();

this.Text = "Щелкните мышкой для изменения цвета";

this.MouseUp += new MouseEventHandler(this.ColorDlgForm_MouseUp);

InitializeComponent();

}

private void ColorDlgForm_MouseUp(object sender, MouseEventArgs e)

{ if (colorDlg.ShowDialog()!= DialogResult.Cancel)

{

this.BackColor = colorDlg.Color;

// Выводим информацию о выбранном цвете

string strARGB = colorDlg.Color.ToString();

MessageBox.Show(strARGB, "Цвет:");

}

}

}

}

 

Методы класса Graphics

У класса Graphics большое число методов и свойств.

Для рисования наиболее важны три группы методов. К первой относится перегруженный метод DrawString, позволяющий выводить тексты в графическом режиме. Вторую группу составляют методы Draw - DrawEllipse, DrawLine, DrawArc и другие, позволяющие цветным пером (объектом класса Pen) рисовать геометрические фигуры: линии, различные кривые, прямоугольники, многоугольники, эллипсы и прочее. К третьей группе относятся методы Fill - FillEllipse, FillPie, FillRectangle и другие, позволяющие нарисовать и закрасить фигуру кистью. Кисти(объекты классов, производных от Brush), могут быть разные - сплошные, узорные, градиентные.

Класс Pen

Методам группы Draw класса Graphics, рисующим контур фигуры, нужно передать перо - объект класса Pen. В конструкторе этого класса можно задать цвет пера и его толщину (чаще говорят "ширину пера"). Цвет задается объектом класса (структурой) Color. Для выбора подходящего цвета можно использовать упоминавшееся выше диалоговое окно Color либо одно из многочисленных статических свойств класса Color, возвращающее требуемый цвет. Возможно и непосредственное задание элементов структуры в виде комбинации ARGB. Вместо создания нового пера с помощью конструктора можно использовать специальный класс предопределенных системных перьев.

Код для вывода графических объектов при помощи класса Pen приведен в листинге 2.

Листинг 2.

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

// создание пера синего цвета шириной 20 писелей

Pen bluePen = new Pen(Color.Blue, 20);

// создание еще одного пера при помощи заготовок из класса Pens

Pen pen2 = Pens.Firebrick;

// Выводим при помощи созданных нами перьев геометрические фигуры

g.DrawEllipse(bluePen, 10, 10, 100, 100); // выводим эллипс

g.DrawLine(pen2, 10, 130, 110, 130); // выводим линию

g.DrawPie(Pens.Black, 150, 10, 120, 150, 90, 80); // выводим часть эллипса

 

// Выводим многоугольник пурпурного цвета

Pen pen3 = new Pen(Color.Purple, 5); // создаем перо пурпурного цвета шириной 5 пикселей

pen3.DashStyle = DashStyle.DashDotDot; // перо: штрих-точка-точка-штрих

// Выводим многоугольник пурпурного цвета и штрих-пунктирным пером

g.DrawPolygon(pen3, new Point[]{new Point(30, 140), new Point(265, 200), new Point(100, 225), new Point(190, 190), new Point(50, 330), new Point(20, 180)});

// Добавляем прямоугольник со вписанным нами текстом

Rectangle r = new Rectangle(150, 10, 130, 60);

g.DrawRectangle(Pens.Blue, r);

g.DrawString("Рисование текста", new Font("Arial", 12), Brushes.Black, r);

// выводим пунктирную линию по периметру формы...

Pen customDashPen = new Pen(Color.BlueViolet, 5);

float[] myDashes = {5.0f, 2.0f, 1.0f, 3.0f};

customDashPen.DashPattern = myDashes;

g.DrawRectangle(customDashPen, ClientRectangle);

}

 

Событие Paint

Cобытие Paint возникает всякий раз, когда область, в которой происходило рисование, повреждена. Причины этого могут быть разные - пользователь свернул форму, изменил ее размеры, произошло перекрытие другой формой, был вызван метод Invalidate - во всех этих случаях требуется перерисовать область. В задачу обработчика события Paint входит перерисовка поврежденной области. Первый раз событие Paint возникает при открытии формы.

Событие Paint подключают обычно не так, как это делалось, например, для события MouseMove. Вместо этого переопределяют родительский метод OnPaint. (Как переопределяются родительские методы группы On, занимающиеся обработкой событий, другие методы классов родителей и базовых интерфейсов? В режиме проектирования в окне классов, отражающем структуру класса, нужно выбрать соответствующий класс (в нашем случае класс формы BezierWeb), раскрыть узел BasesAndInterfaces этого класса и из появившегося списка всех наследованных свойств и методов выбрать нужный (в нашем случае метод OnPaint). В результате появится заготовка для переопределения метода.)

 

Пример.

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

Создайте новое приложение и назовите его EasyPaint. Добавляем на форму элементы управления MenuStrip и ColorDialog. Устанавливаем следующие значения свойств формы и пунктов меню:

 

 

Form1, форма, свойство Значение
BackColor ActiveCaptionText
Text EasyPaint
   

 

Меню(Name Text
mnuFormat &Формат
mnuColor &Цвет
mnuWidth &Толщина линии

 

Рисовать мы будем при удержании и перемещении левой кнопки мыши. В классе формы добавляем код:

 

//Переменная, отвечающая за включения режима рисования значение true — режим //включен

bool DrawMode = false;

//Создаем массив точек, из которых будут формироваться линии

ArrayList points = new ArrayList();

Color col = new Color();

float pw=1;

 

В графических программах принято в рабочей области изменять курсор — пользователю удобнее рисовать, когда он имеет вид карандаша. Можно просто установить значение из перечисления свойства Cursor формы (рис.1), но как быть, если нужен вид, не входящий в это перечисление?

 

Рис. 1. Свойство Cursor формы

 

Самый простой способ добавить произвольный курсор к приложению — это поместить изображение курсора (в данном случае, Pencil.cur) в папку bin\Debug приложения и в конструкторе формы указать этот курсор в качестве основного:

 

Public Form1()

{

InitializeComponent();

this.Cursor = new Cursor("Pencil.cur");

col = this.ForeColor;

Pen mainPen = new Pen(col); // установить цвет пера

}

Переключаемся в режим дизайна, в окне Properties в событиях формы дважды щелкаем в поле событий MouseDown, MouseMove, MouseUp:

 

//Событие возникает при нажатии на кнопку мыши



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: