Цель работы: получить практические навыки применения
основных классов библиотеки FCL,составляющих графический
интерфейс устройств (Graphical Device Interface, GDI).
Задачи работы:
– изучить классы Graphics, Color, Pen, Brush, Image библиотеки FCL, обеспечивающие вывод графики в приложениях для Windows;
– выполнить практическое задание по разработке приложения на языке С#.
Краткие теоретические сведения
Рассмотрим пример разработки приложения, обеспечивающего вывод простых геометрических фигур, а также сохранение построенного изображения в файле (рис. 6.1).
Меню File содержит команду New для создания нового изображения, Open для загрузки изображения из файла, Save для сохранения изображения в файле и Exit для завершения работы приложения. Должны присутствовать следующие элементы управления:
– pictureBox1 загружает стандартное диалоговое окно colorDialog1, в котором можно выбрать цвет изображения;
– numericUpDown1 позволяет выбирать толщину пера, которым рисуется контур изображения;
– флажок FillCheckbox устанавливает признак заливки фигуры;
– с помощью списка FigureList можно выбрать тип геометрической фигуры;
– pictureBox2 обеспечивает поверхность рисования.
|
|
|
|
|




Рис. 6.1. Главное окно приложения
В процессе проектирования приложения на форме нужно разместить невизуальные элементы управления openFileDialog для выбора имени открываемого файла, saveFileDialog для сохранения файла и colorDialog для выбора цвета изображения.
Код приложения приведен в листинге 6.1.
Листинг 6.1. Код приложения для вывода простых геометрических фигур
Namespace WindowsApplication2
{
Public partial class Form1: Form
{
Public Form1()
{
InitializeComponent();
}
// Класс Bitmap инкапсулирует точечный рисунок GDI+, состоящий из
// данных пикселей графического изображения и атрибутов рисунка
// Объект класса Bitmap используется для работы с изображениями,
// определяемыми данными пикселей
Bitmap b;
Graphics g;
// Класс Point представляет упорядоченную пару целых чисел –
// координат Х и Y, определяющую точку на двумерной плоскости
Point startPoint;
// Щелчок по элементу pictureBox1 позволяет выполнить выбор цвета
// изображения
private void pictureBox1_Click(object sender, EventArgs e)
{
this.colorDialog1.Color = this.pictureBox1.BackColor;
if (this.colorDialog1.ShowDialog() == DialogResult.OK)
{
this.pictureBox1.BackColor = this.colorDialog1.Color;
}
}
Private void Form1_Load(object sender, EventArgs e)
{
// Задание размеров поверхности рисования
this.b = new Bitmap(this.pictureBox2.Size.Width,
this.pictureBox2.Size.Height);
this.g = Graphics.FromImage(this.b);
this.pictureBox2.Image = b;
this.g.Clear(Color.White);
this.FigureList.SelectedIndex = 0;
}
Private void pictureBox2_MouseDown(object sender,
MouseEventArgs e)
{
this.startPoint = new Point(e.X, e.Y);
}