Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Введение в графику в MS Visual Studio



Программы, написанные для платформы.NET работают с графикой посредством библиотеки GDI+, представляющей собой набор пространств имен для работы с 2d графикой: цвета, кисти, шрифты, обработка изображений и сглаживание (анти-алиасинг). GDI+ не поддерживает 3d графику и библиотеки DirectX.

Пространство имен Описание
System::Drawing Классы для 2d графики, а так же основной класс Graphics
System::Drawing::Drawing2d Расширенные возможности 2d графики, векторная графика
System::Drawing::Imaging Классы для работы с графическими изображениями
System::Drawing::Printing Печать
System::Drawing::Text Работа со шрифтами

Почти весь основной функционал GDI+ содержится в пространстве System::Drawing

Класс/структура внутри System::Drawing Описание
Bitmap Базовая обработка изображений в форматах bmp, gif, jpg
Brush Класс кисти для определения цвета и текстуры при заливке прямоугольников, эллипсов/окружностей и полигонов.
Brushes Класс со статичным, заранее определенным набором кистей.
Color Структура, определяющая цвет.
Font Класс шрифта.
FontFamily Класс для группы шрифтов с одинаковым дизайном
Graphics Класс, представляющий собой поверхность для рисования.
Icon Класс для стандартной иконки Windows
Image Абстрактный класс для классов Bitmap и Icon.
Pen Класс ручки, определяющий цвет, толщину и текстуру обводки фигур.
Pens Класс с набором заранее определенных классов Pen.
Point, PointF Структура, содержащая координаты (x,y) в целых числах типа Int32 или с плавающей точкой типа Single.
Rectangle, RectangleF Структура, описывающая размер и расположение прямоугольника с помощью типов Int32 или Single.
Region Класс, определяющий геометрическую фигуру посредством прямоугольников.
Size, SizeF Структура, определяющая размер в числах типа Int32 или Single.
SolidBrushes Класс-кисть для сплошного заполнения заданным цветом.
TextureBrush Класс-кисть, использующий для заполнения заданное изображение.

Пространство System::Drawing автоматически подключается в проектах Visual Studio 2008, поэтому писать вручную using namespace System::Drawing не требуется.

2.1 Приступая к работе: класс Graphics

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

Рассмотрим способы создания объекта Graphics.

· Получение ссылки на объект Graphics через объект PaintEventArgs при обработке события Paint формы или элемента управления. Это обычный способ получения ссылки на графический объект при создании кода рисования элементов управления.

void my_lines_1()

{

//создание пера для рисования

Pen^ greenPen = gcnew Pen(Brushes::Green);

//рисование параллельных линий

for(int i=1; i<=7; i++)

//прорисовка изображения на экране с помощью объекта graphics

e->Graphics->DrawLine(greenPen, 50+10*i, 25+7*i, 20+10*i, 200+7*i);

//освобождение созданного пера

delete greenPen;

}

· Вызов метода CreateGraphics элемента управления или формы, чтобы получить ссылку на объект Graphics соответствующий поверхности рисования этой формы или элемента управления. Используйте этот подход, если необходимо рисовать на поверхности уже существующей формы или элемента управления.

Рассмотрим пример кода, который создаёт объект Graphics, соответствующий поверхности формы, и рисует на форме несколько параллельных линий, но уже без использования объекта PaintEventArgs.

void my_lines_2()

{

//создание объекта graphics с помощью вызова метода CreateGraphics() формы

System::Drawing::Graphics ^g=example::CreateGraphics();

Pen^ bluePen = gcnew Pen(Brushes::Blue);

//рисование параллельных линий

for(int i=1; i<=7; i++)

g->DrawLine(bluePen, 50+10*i, 25+7*i, 20+10*i, 200+7*i);

//освобождение созданного объекта graphics и пера

delete bluePen;

delete g;

}

· Создание объекта Graphics из любого объекта, унаследованного от класса Image. Этот способ используется, когда требуется изменить существующее изображение.

Для следующего кода требуется объект PaintEventArgs, являющийся параметром обработчика событий Paint. Этот код выполняет следующие действия.

o Создает объект Image из графического файла flower.jpg в папке примера.

o Создает объект Graphics из объекта Image.

o Изменяет изображение Image, рисуя рамку вокруг него.

o Рисует изображение Image на экране.

o Освобождает созданный объект Graphics.

void image_with_border(PaintEventArgs^ e)

{

//создание объекта Image из графического файла flower.jpg в папке примера

Image^ newImage = Image::FromFile("flower.jpg");

//создание объекта graphics из объекта Image

System::Drawing::Graphics^g=

System::Drawing::Graphics::FromImage(newImage);

// создание пера и рисование рамки

Pen^ skyBluePen = gcnew Pen(Brushes::DeepSkyBlue);

g->DrawRectangle(skyBluePen,0,0,newImage->Width-1,newImage->Height-1);

//вывод изображения Image на экран

e->Graphics->DrawImage(newImage, 100,100);

//освобождение созданного объекта graphics и пера

delete skyBluePen;

delete g;

}

Следует обратить внимание на особенности системы координат: левый верхний угол области рисования - это позиция (0,0), координата x возрастает слева направо, а координата y - сверху вниз.

2.2 Pen: основные свойства

Используя объект Graphics, можно нарисовать много разных фигур и линий. Начнём с наиболее простого: рисование прямой.

Чтобы нарисовать линию, нужно создать два объекта: объект Graphics и объект Pen. У объекта Graphics имеется метод Drawline, а объект Pen предназначен для хранения таких параметров рисуемой линии, как ее ширина и цвет. Ниже приведены примеры

System::Drawing::Pen^ myPen;

myPen = gcnew System::Drawing::Pen(System::Drawing::Color::Tomato);

Pen^ skyBluePen = gcnew Pen(Brushes::DeepSkyBlue);

Pen^ blackPen = gcnew Pen(Color::Black,3.0f);//заданы цвет и толщина

/*изменим свойства созданных кистей: зададим новый цвет для первой и толщину для второй*/

skyBluePen->Width = 8.0F;

myPen->color= System::Drawing::Color::Blue;

Итак, объект Pen рисует линию заданной ширины и указанного стиля. Свойство DashStyle используется для рисования разнообразных штрих-пунктирных линий, возможные значения этого свойства приведены в таблице. Нарисованную при помощи объекта Pen линию можно заполнить, используя различные стили заливки, включая сплошные цвета и текстуры. Но об этом - несколько позже.

В следующем примере кода демонстрируется, как создать перо и установить его свойство DashStyle.

Pen^ myPen = gcnew Pen(Color::ForestGreen,4.0F);

myPen->DashStyle =System::Drawing::Drawing2D::DashStyle::DashDotDot;

Теперь приведём пример кода, демонстрирующего рисование отрезка с помощью метода Drawline объекта Graphics. Drawline Проводит линию, соединяющую две точки, задаваемые парами координат. Координаты точек могут быть перечислены явно или же заданы с помощью структур Point и PoinFt (представляет упорядоченную пару целых чисел или чисел с плавающей запятой соответствено - координат Х и Y, определяющую точку на двумерной плоскости).

void my_lines_2()

{

//создание объекта graphics с помощью вызова метода CreateGraphics() формы

System::Drawing::Graphics ^g=example::CreateGraphics();

Pen^ bluePen = gcnew Pen(Brushes::Blue);

//определение начала и конца изображаемого отрезка с помощью структуры РointF

РointF drawPoint1 = new PointF(150.0F, 150.0F);

PointF drawPoint2 = new PointF(190.0F, 20.0F);

//рисование линий

g->DrawLine(bluePen, 50+10*i, 25+7*i, 20+10*i, 200+7*i);

g->DrawLine(bluePen, drawPoint1, drawPoint2);

//освобождение созданного объекта graphics и пера

delete bluePen;

delete g;

}





Дата публикования: 2015-04-10; Прочитано: 3725 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.014 с)...