Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
П_З.docx
Скачиваний:
3
Добавлен:
24.08.2019
Размер:
179.91 Кб
Скачать

Очистка изображения

Разместите в форме Form1 еще одну кнопку (button4), положите ее свойство Text равным &clear и определите обработчик события click для этой кнопки (листинг 13).

Листинг 13. Обработчик buttori4_Click

private void button4_Click(object sender, EventArgs e)

{using (Graphics g = Graphics . Fromlmage (pictureBox1. Image))

g.Clear(Color.White);

pictureBox1.Invalidate();

При нажатии кнопки Clear изображение очищается, т. е. закрашивается белым цветом.

В методе button4_click используется полезный оператор using, предусмотренный в языке C# для работы с "короткоживущими" объектами (например, объектами типа Graphics). В заголовке этого оператора (в скобках после слова using) описывается и создается короткоживущая переменная, которая может использоваться только в операторе, следующем за заголовком using (если данную переменную требуется использовать в нескольких операторах, то их надо превратить в составной оператор, заключив в фигурные скобки {}). При выходе из оператора using для указанной переменной автоматически вызывается Метод Dispose.

Рисование цветным пером

Разместите в форме Form1 две новые метки (label2 И 1аЬе13), компонент типа NumericUpDown (он получит имя numericUpDown1) И невизуальный компонент типа ColorDialog (он получит имя colorDialog1 и будет размещен под изображением формы). Настройте свойства добавленных визуальных компонентов (листинг 14).

Измените описание поля Pen в классе Form1:

private Pen pen = new Pen(Color.Black);

Определите обработчики событий Click и BackColorChanged для метки label2, а также обработчик события ValueChanged для компонента numericUpDown1 (листинг 15).

Листинг 14. Настройка свойств

label2: Text = пустая строка, AutoSize = False, Size = 40; 40,

BackColor = Black, BorderStyle = FixedSingle label3: Text = Width:

numericUpDownl: Maximum = 22, Minimum = 1, Value = 1, Increment = 3

Листинг 15. Обработчики label2_Click, label2, BackColorChanged и numericUpDownl. ValueChanged

private void label2_Click(object sender, EventArgs e)

{colorDialogl.Color = label2.BackColor; if (colorDialogl.ShowDialog() = DialogResult.OK)

label2.BackColor = colorDialogl.Color;}

private void label2_BackColorChanged(object sender, EventArgs e)

{pen.Color = label2.BackColor;}

private void numericUpDownl_ValueChanged(object sender, EventArgs e)

{pen. Width = (int) numericUpDownl. Value ;}

При рисовании можно выбирать цвет пера, щелкая мышью на метке 1аbе12, фон которой соответствует текущему цвету пера; в результате на экране появляется диалоговое окно Цвет, позволяющее выбрать требуемый цвет (при закрытии данного окна кнопкой ОК фон метки 1аbе12 закрашивается выбранным цветом); толщину пера, устанавливая ее значение с помощью компонента numericUpDownl (допустимыми являются значения от 1 до 22).

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

При рисовании линий большой толщины результат оказывается неудовлетворительным.

В начало файла Form1.cs добавьте оператор

using System. Drawing. Drawing2D;

В конструктор класса Form1 добавьте оператор pen.StartCap = pen. EndCap = LineCap.Round;

Теперь толстые линии рисуются надлежащим образом.

Для возможности изменения свойств пера color и width потребовалось изменить способ его создания, так как стандартные перья, получаемые из класса Pens, не допускают изменения своих свойств. Для создания пера был использован один из вариантов конструктора класса Pen, содержащий один параметр — цвет пера (толщина по умолчанию полагается равной 1).

Обратите внимание на "разделение обязанностей” обработчиков для метки label2: обработчик label2_click отвечает за выбор цвета с помощью диалогового окна и изменение фона метки в соответствии с выбранным цветом, а обработчик label2_BackCoiorChanged отвечает за изменение цвета пера при изменении цвета фона метки. В дальнейшем нам может потребоваться выполнять дополнительные действия, связанные с изменением текущего цвета пера; эти действия будет достаточно указать в обработчике 1аbе12_ BackCoiorChanged. Кроме того, цвет пера

может быть изменен не только с помощью диалогового окна Цвет, а, например, с помощью инструмента "пипетка". В этом случае нам будет достаточно присвоить новый цвет свойству BackColor метки label2, и это автоматически приведет к выполнению всех действий, связанных с изменением цвета пера.

Отмеченный недочет был вызван неудачной формой концов линий. По умолчанию концы линий делаются прямоугольными (LineCap. Flat), поэтому при любом изменении направления рисования неизбежно возникают изломы. В нашей ситуации естественнее использовать закругленные концы линий; для этого достаточно после создания объекта Pen установить новое значение LineCap.Round для его свойств startcap (форма начала линии) и EndCap (форма конца линии). Перечисление LineCap определено в про­странстве имен System.Drawing.Drawing2D.