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

Листинг 6.10

Bitmap bmp = new Bitmap(150, 90);

Graphics g = Graphics.FromImage(bmp);

Метод OnPaint класса Form получает в качестве параметра объект PaintEventArgs. Одним из членов данного объекта является объект Graphics, связанный с формой. Переопределяя метод OnPaint класса Form, можно получить доступ к объекту Graphics из параметра PaintEventArgs, после чего можно работать с графикой в клиентской области формы. Вызов этого метода показан в листинге 6.11.

Листинг 6.11

Protected override void OnPaint(PaintEventArgs e) {

 Graphics g = e.Graphics;

}

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

Метод DrawImage рисует заданный объект Image в указанной позиции экрана. Всего существует четыре перегруженные версии метода. Но в самой простой его версии достаточно указать координаты выводимой картинки, как показано в листинге 6.12.

Листинг 6.12

g.DrawImage(myImage, 10, 10);

С помощью метода DrawImage можно выводить на экран не все изображение, а только его часть. В этом случае надо указать размеры прямоугольника, который определяет размеры выводимой области картинки, как показано в листинге 6.13. В примере используется перечисление GraphicsUnit.Pixel, которое позволяет указывать единицы измерения.

Листинг 6.13

Bitmap myBMP = new Bitmap(@"\windows\banner.gif");

Rectangle portion = new Rectangle(1, 1, 150, 25);

g.DrawImage(myBMP, 20, 220, portion, GraphicsUnit.Pixel);

Метод FillRectangle уже применялся при рассмотрении кистей. Метод DrawRectangle использует перо вместо кисти, поэтому на экран выводится незакрашенный прямоугольник.

Чтобы нарисовать достаточно сложную фигуру, можно задать массив точек и соединить их прямыми отрезками, после чего можно закрасить получившуюся фигуру. Для этого разработчик может использовать методы DrawPolygon и FillPolygon. В листинге 6.14 приведен код, который позволяет нарисовать простой ромб по указанным точкам.

Листинг 6.14

// Нарисуем ромб

// Зададим массив точек

Point[] arrPoint = {

 new Point(150, 50),

 new Point(200, 100),

 new Point(150, 150),

 new Point(100, 100),

 new Point(150, 50),

};

g.DrawPolygon(bluePen, arrPoint);

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

Рис. 6.1. Основные приемы работы с графикой

<p>Создание собственных методов DrawPie и FillPie</p>

В данный момент .NET Compact Framework не поддерживает графические методы DrawPiе и FillPie, которые позволяли бы рисовать круговые секторы. Но можно создать свою версию этих методов, используя математические вычисления, как показано в листинге 6.15.

Листинг 6.15

///

///Рисуем закрашенный сектор

///Параметры функции

///g - Объект Graphics

///solidBrush - Кисть для закраски сегмента

///x,y - Координаты центра

///width - Ширина сегмента

///height - Высота сегмента

///startAngle - Значение начального угла

///endAngle - Значение конечного угла

///

private void FillPie(Graphics g, SolidBrush solidBrush, int x, int y,

 int width, int height, double startAngle, double endAngle) {

 double[] xAngle = new double[12];

 double[] yAngle = new double[12];

 double angleIncrement = (endAngle - startAngle) / 10;

 double angle = startAngle;

Перейти на страницу:

Похожие книги