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

Работа с битовым изображением



Точечный (растровый) рисунок содержит данные элементов отображения (точек) и атрибуты графического изображения. Для работы с такими изображениями используется объект Bitmap. Класс Bitmap поддерживает различные форматы файлов, включая BMP, GIF, JPEG, PNG и TIFF. В качестве параметра конструктору класса передаётся имя загружаемого файла. Для вывода изображения на экран используется метод DrawImage объекта Graphics.

Один из вариантов метода DrawImage в качестве параметров принимает объекты Bitmap и Rectangle. Прямоугольник задает область, в которой должно быть нарисовано изображение. Если размер прямоугольника назначения отличается от размеров исходного изображения, изображение масштабируется, чтобы соответствовать прямоугольнику назначения. В приведенном ниже примере кода демонстрируется три способа рисования одного изображения: рисование без масштабирования, рисование с увеличением и рисование со сжатием.

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

System::Drawing::Bitmap^ fl_bm = gcnew Bitmap("flower_1.jpg");

float w=fl_bm->Width;

float h=fl_bm->Height;

/*Вывод немасштабированного изображения, левый верхний угол расположен в точке (20,20).*/

g->DrawImage(fl_bm, 20,20);

/*определение прямоугольной области, в которую будет вписано изображение.*/

RectangleF r_max = RectangleF(135.0, 10.0, w+67, h+2);

RectangleF r_min = RectangleF(300.0, 10.0, w/2, h/2);

/*Вывод масштабированного изображения в заданной области.*/

g->DrawImage(fl_bm, r_max);

g->DrawImage(fl_bm, r_min);

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

//определение «копируемой» части изображения

Rectangle part = Rectangle(20, 20, 80, 110);

//определение размеров и расположения областей отображения

Rectangle small_area = Rectangle(200, 20, 20, 40);

Rectangle large_area = Rectangle(265, 185, 220, 165);

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

g->DrawImage(fl_bm, small_area/*область отображения*/,\

part/*область копирования*/, GraphicsUnit::Pixel\

/*единица измерения для заданных данных*/);

g->DrawImage(fl_bm, large_area, part, GraphicsUnit::Pixel);

Изображение можно поворачивать, отражать и наклонять, указывая точки назначения для верхнего левого, верхнего правого и нижнего левого углов исходного изображения. Эти три точки назначения определяют аффинное преобразование, которое отображает исходное прямоугольное изображение в параллелограмм.

array<Point>^ transform_points =

{

/* точка, в которую отображается левый верхний угол исходного изображения*/

Point(200, 20),

/* точка, в которую отображается правый верхний угол исходного изображения*/

Point(110, 100),

/* точка, в которую отображается левый нижний угол исходного изображения*/

Point(250, 30)

};

//вывод трансформированного изображения

g->DrawImage(fl_bm, transform_points);

Изображение можно изменить, нарисовав на его поверхности некоторые дополнительные детали. Для этого нужно из имеющегося объекта Bitmap создать объект класса 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;

}

Задание на лабораторную работу №5

Продемонстрировать основные приёмы работы с графическими примитивами и битовыми изображениями. Показать различные способы использования свойств объекта класса Brush (достаточно любых двух).

Поскольку более строго ограничивать тему или содержание задания было бы достаточно бессмысленным, выбор способа его выполнения остаётся за вами. Например, можно создать коллаж средствами Visual Studio. На рисунке приведён пример такого коллажа. Используемые приёмы:

· Рисование многоугольников (как контуров, так и сплошных фигур);

· рисование окружностей, эллипсов и их частей;

· заливка контура замкнутой фигуры с помощью одноцветной кисти и с применением шаблона штриховки;

· работа с цветом: установка прозрачности;

· обрезка, масштабирование, поворот растрового изображения.





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



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