Класс
Brush
является абстрактным классом для создания кистей, с помощью которых можно рисовать фигуры и текст на графической поверхности. Библиотека .NET Compact Framework поддерживает классы SolidBrush
и TextureBrush
. К сожалению, класс LinearGradientBrush
, позволяющий рисовать красивые фигуры, в настоящее время не поддерживается.Класс SolidBrush
При создании объекта
SolidBrush
нужно просто указать цвет, который будет использоваться для отображения фигур. Чтобы сменить цвет кисти, достаточно указать новый цвет в свойстве Color
. В листинге 6.2 приведен код, который позволяет нарисовать зеленый круг и желтый прямоугольник.Листинг 6.2private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
// Создаем кисть зеленого цвета
SolidBrush myBrush = new SolidBrush(Color.Green);
// Рисуем закрашенный круг
g.FillEllipse(myBrush, 10, 30, 30, 30);
// Меняем цвет кисти на желтый
myBrush.Color = Color.Yellow;
// Рисуем закрашенный прямоугольник
g.FillRectangle(myBrush, 50, 30, 50, 25);
}
Класс TextureBrush
Класс
TextureBrush
позволяет создавать текстурную кисть. Подобная текстурная кисть позволяет не рисовать однородным цветом, а применять текстурное заполнение отображаемых графических примитивов. Использование подобной кисти позволяет добиваться красивых эффектов. В листинге 6.3 приведен пример использования текстурной кисти с использованием изображения, входящего в состав Windows Mobile 2003.Листинг 6.3private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
// выбираем рисунок
Image myImage = new Bitmap(@"\Windows\alerts.bmp");
// создаем текстурную кисть TextureBrush
texture = new TextureBrush(myImage);
// Рисуем эллипс, заполненный рисунком
g.FillEllipse(texture, 10, 60, 120, 120);
g.Dispose();
}
ВНИМАНИЕТакие свойства класса TextureBrush, как Transform и WrapMode, не поддерживаются в .NET Compact Framework 2.0.
Класс Color
При создании перьев или кистей применялся класс
Color
. Он позволяет задавать цвет либо с помощью предопределенного названия, либо указывая составные части цвета в модели RGB. Например, для создания красного цвета можно использовать код, приведенный в листинге 6.4.Листинг 6.4// красный цвет по названию
Color redColor = Color.Red;
// красный цвет из компонентов RGB
Color redColor2 = Color.FromArgb(255, 0, 0);
// Выводим на экран две красные линии
g.DrawLine(new Pen(redColor), 10, 190, 100, 190);
g.DrawLine(new Pen(redColor2), 10, 195, 100, 195);
Класс Font
Класс
Font
используется для вывода текста. Как ни странно, вывод текстовой информации тоже является графической операцией, что немного смущает новичков. Из четырнадцати возможных перезагруженных версий конструктора класса в .NET Compact Framework доступно только три. Для создания объекта Font
нужно определить семейство шрифтов, размер символов и стиль начертания. Пример использования шрифта приведен в листинге 6.5.Листинг 6.5Font myFont = new Font("Tahoma", 9, FontStyle.Italic);
g.DrawString("Карманный компьютер", myFont, myBrush, 14, 200);
Класс Icon
Объект
Icon
используется методом DrawIcon
для отображения пиктограмм. Предположим, что необходимо использовать пиктограмму, хранящуюся в ресурсах программы. В таком случае понадобится код, приведенный в листинге 6.6.Листинг 6.6Icon myIcon = new Icon(Assembly.GetExecutingAssembly().
GetManifestResourceStream("MyApp.Icon.ico"));
Класс Bitmap
Класс
Bitmap
предназначен для работы с растровыми изображениями. Программист может загрузить картинку в объект Bitmap
из потока Stream
, скопировать из существующего объекта Bitmap
или загрузить из файла. Также можно создать новый пустой объект Bitmap
, указав только размеры картинки. Ранее класс Bitmap
уже использовался при создании текстурной кисти. Но при этом применялся родственный объект Image
. В листинге 6.7 приведен новый вариант создания кисти.Листинг 6.7// выбираем рисунок
Bitmap myImage = new Bitmap(@"\Windows\alerts.bmp");
// создаем текстурную кисть
TextureBrush texture = new TextureBrush(myImage);
Структура Point
Структура
Point
содержит координаты X и Y для указания расположения некоей точки. В библиотеке .NET Compact Framework поддерживается только один конструктор для создания объекта Point
, в котором указываются эти координаты. Структура Point
часто используется в методах DrawPolygon
и FillPolygon
, которые будут рассматриваться позже.Структура Rectangle
Структура
Rectangle
определяет размер и расположение прямоугольника. В мобильной версии используется только один конструктор, определяющий прямоугольник по координатам левого верхнего угла, ширине и высоте, что иллюстрирует код, приведенный в листинге 6.8.Листинг 6.8Rectangle myRectangle = new Rectangled(10, 10, 70, 210);
Графические методы
В предыдущих примерах уже были использованы несколько методов для работы с графикой. Но сейчас следует поговорить о них более подробно. Прежде всего нужно помнить, что для работы с графическими методами необходимо сначала создать объект
Graphics
. Существует несколько способов получения объекта Graphics
, и они будут рассматриваться достаточно подробноМетод
CreateGraphics
формы или элемента управления позволяет получить объект Graphics
, предоставляющий возможность рисовать на форме или элементе управления. Этот метод демонстрируется в листинге 6.9.Листинг 6.9Graphics g = this.CreateGraphics();
Метод
FromImage
создает новый объект Graphics
из заданного объекта Image
. При помощи этого метода можно изменять существующее изображение или создавать новое изображение. Причем обработанное изображение можно потом сохранить в графическом файле. Использование метода иллюстрирует код, приведенный в листинге 6.10.Листинг 6.10Bitmap bmp = new Bitmap(150, 90);
Graphics g = Graphics.FromImage(bmp);
Метод
OnPaint
класса Form
получает в качестве параметра объект PaintEventArgs
. Одним из членов данного объекта является объект Graphics
, связанный с формой. Переопределяя метод OnPaint
класса Form
, можно получить доступ к объекту Graphics
из параметра PaintEventArgs
, после чего можно работать с графикой в клиентской области формы. Вызов этого метода показан в листинге 6.11.Листинг 6.11Protected override void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
}
Получив любым из перечисленных способов доступ к объекту