Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР9.doc
Скачиваний:
24
Добавлен:
21.09.2019
Размер:
4.54 Mб
Скачать

Краткое введение в графику

Для вывода линий, геометрических фигур, текста и изображений необходимо создать экземпляр класса Graphics, описанного в пространстве имен System.Drawing. Существуют различные способы создания этого объекта.

Первый способ состоит в том, что ссылку на объект Graphics получают из параметра PaintEventArgs, передаваемого в обработчик события Paint, возникающего при необходимости прорисовки формы или элемента управления:

private void Form1_Paint( object sender, PaintEventArgs e )

{ Graphics g = e.Graphics;

// использование объекта

}

Второй способ — использование метода CreateGraphics, описанного в классах формы и элемента управления:

Graphics g;

g = this.CreateGraphics();

Третий способ — создание объекта с помощью объекта-потомка Image. Этот способ используется для изменения существующего изображения:

Bitmap bm = new Bitmap( "d:\\picture.bmp" );

Graphics g = Graphics.FromImage( bm );

После создания объекта типа Graphics его можно применять для вывода линий, геометрических фигур, текста и изображений. Основными объектами, которые при этом используются, являются объекты классов:

  • Pen — рисование линий и контуров геометрических фигур;

  • Brush — заполнение областей;

  • Font — вывод текста;

  • Color — цвет.

В листинге 9.6 представлен код приложения, в котором на форму выводится линия, эллипс и текст. Вид формы приведен на рис. 9.13.

Рис. 9.13 - Форма с графикой

Листинг 9.6. Работа с графическими объектами

using System;

using System.Drawing;

using System.Windows.Forms;

namespace WindowsApplication1

{

public partial class Form1 : Form

{

public Form1() { InitializeComponent(); }

private void Form1_Paint(object sender, PaintEventArgs e)

{

using (Graphics g = e.Graphics) // 1

{

using (Pen pen = new Pen(Color.Red)) // 2

{

g.DrawLine(pen, 0, 0, 200, 100);

g.DrawEllipse(pen, new Rectangle(50, 50, 100, 150));

}

string s = "Sample Text";

Font font = new Font("Arial", 18); // 3

SolidBrush brush = new SolidBrush(Color.Black); // 4

float x = 100.0F;

float y = 20.0F;

g.DrawString(s, font, brush, x, y);

font.Dispose(); // 5

brush.Dispose(); // 6

}

}

}

}

Графические объекты потребляют системные ресурсы, поэтому рекомендуется вызывать для них метод освобождения ресурсов Dispose. Для упрощения работы с такими объектами в C# есть оператор using со следующим синтаксисом:

using ( выделение_ресурса ) оператор

Под ресурсом здесь понимается объект, который реализует интерфейс System.IDisposable, включающий метод Dispose. Код, использующий ресурс, вызовом этого метода сигнализирует о том, что ресурс больше не требуется. Если метод Dispose не был вызван, освобождение ресурса выполняется в процессе сборки мусора.

Оператор using неявным образом вызывает метод Dispose в случае успешного создания и использования объекта. Этот способ применен в операторах 1 и 2. В операторах 3 и 4 объекты создаются обычным образом, поэтому для них требуется явный вызов Dispose, что и происходит в операторах 5 и 6.

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