
- •Лабораторна робота 10
- •Мета. Навчитись розробляти програми, які працюють з графікою; створювати картинки за допомогою графічних примітивів, або ілюстрацій, створених в графічному редакторі Завдання до роботи
- •Теоретічні відомості Графічні примітиви
- •Ілюстрації
- •Запрограмувати обробку подій OnPaint та OnResize для форми.
- •Створіть проект для роботи з бітовими зображеннями.
- •Сформуйте фоновий рисунок як багатократне виведення бітового зображення на поверхню форми, використавши функцію Background() (рис. 4)
- •Виведіть зображення фону та рисунку на форму за допомогою методу Draw()
- •Завантажте бітове зображення із ресурсу програми
- •Створити файл ресурсів
- •Підключити файлу ресурсів
- •Збережіть створену програму у своїй папці.
- •Створіть ехе-файл вашої програми.
- •Продемонструйте створену форму викладачеві. Закінчіть роботу.
- •Контрольні запитання:
- •1. Назвіть основні Методи для рисування графічних примітивів
- •2. Як здійснити виведення тексту на поверхню Canvas?
-
Запрограмувати обробку подій OnPaint та OnResize для форми.
void__fastoall TForml::FormPaint(TObject *Sender)
{
Grafik();
}
void __fastcall TForml::FormResize(TObject *Sender)
{
TRect ret = Rect(0,0,Ciientwidth,CiientHeight);
Canvas->FillRect(ret); // стерти Grafik();
}
Рис. 2. Графік, побудований по точках
Задача 2. Вивести ілюстрацію, яка заходиться у файлі з розширенням bmp, jpg или ico, за допомогою компоненти image. Виконати масштабування ілюстрації у відповідності з реальними розмірами компоненти.
-
Створити проект для перегляду ілюстрацій як на рисунку 3
Рис. 3. Діалогове вікно програми Перегляд ілюстрацій
-
Підключити файл заголовків jpeg.hpp для відображення JPG-файлів та FileCtrl.hpp - для доступу до функції SelectDirectory.
-
Задати глобальні змінні
AnsiString aPath; // каталог, в якому знаходиться файл
TSearchRec aSearchRec; // результат пошуку файла
-
Запрограмувати подію OnCreate для форми
void __fastcall TForml::FormCreate(TObject *Sender)
{
aPath = ""; // поточний каталог, з якого запущена програма
Imagel->AutoSize = false;
Imagel->Proportional = true;
Button2->Enabled = false;
FirstPicture(); // показує картинку, яка є в каталозі
}
-
Запрограмувати кнопку з назвою Каталог
void __fastcall TForml::ButtonlClick(TObject *Sender)
{
if (SelectDirectory("Виберіть каталог, в якому знаходиться файл", "",aPath) != 0)
{aPath = aPath + "\\";
FirstPicture(}; // вивести картинку
}
}
-
Створити функції FirstPicture і NextPicture для виведення першої та наступних картинок
void TForml::FirstPicture()
{
Imagel->Visible = false; // скрыть компонент Imagel
Button2->Enabled = false; // кнопка Дальше недоступна
Labell->Caption = "";
if ( FindFirst(aPath+ "*.jpg", faAnyFile, aSearchRec) == 0)
{
Imagel->Picture->LoadFromFile(aPath+aSearchRec.Name);
Imagel->Visible = true;
Labell->Caption = aSearchRec.Name;
if ( FindNext(aSearchRec) == 0) // найти след, иллюстрацию
{
// иллюстрация есть
Button2->Enabled = true; // теперь кнопка Дальше доступна
} }
}
Задача 3.
Для формуровання складних зображень використовують бітові зображення. Бітові зображення — це, як правило, невелика картинка, якя заходиться в пам’яті комп’ютера.
Сформувати бітове зображення шляхом завантаження із bmp-файлу або із ресурсу, а також шляхом копіювання фрагменту із іншого бітового зображення, в тому числі і з поверхності форми.
Створити фоновий рисунок як багатократне виведення бітового зображення на поверхню форми.
Реалізувати програму «Політ над містом», у якій бітові зображення фону та об’єкта завантажуються із файлу. Картинки бітових зображень підготовити за допомогою графічного редактора.
Теоретичні відомості
У програмі битове зображення — це об’єкт типу TBitmap. Деякі властивості об’єкта TBitmap наведені в таблиці. 5.
Завантаження картинки із файлу забезпечує метод LoadFromFile, якому в якості параметра передається ім’я имя bmp-файлу. Наприклад, наступний фрагмент коду забезпечує створення і завантаження бітового зображення із файлу.
Graphics: :TBitmap *Plane = new Graphics: :TBititiap();
Plane->LoadFromFile("plane.bmp");
У результаті виконання наведеного вище фрагменту, бітове зображення Plane представляє зображення літака (передбачається, що у файлі plane.bmp знаходиться зображення літака).
Таблиця 5. Властивості об’єкта TBitmap
Властивість |
Опис |
Height, Width |
Розмір (ширина, висота) бітового зображення. Значення властивостей відповідають розміру завантаженою із файлу (метод LoadFromFile) або ресурсу (метод LoadFromResourcelD або LoadFromResourceName) картинки |
Empty |
Ознака того, що картинка в бітове зображення не завантажена (true) |
Transparent |
Встановлює (true) режим використання "прозорого" кольору. При виведенні бітового зображення методом Draw елементів картинки, колір яких збігається із кольором TransparentColor, не виводяться. За замовчуванням значення TransparentColor визначає колір лівого нижнього пиксела |
TransparentColor |
Задає прозорий колір. Елементи картинки, забарвлені цим кольором, методом Draw не виводяться |
Canvas |
Поверхня бітового зображення, на якому можна малювати точно так, як і на поверхні форми або компоненту image |
Після того як бітове зображення сформовано (завантажено із файлу або із ресурсу), його можна вивести, наприклад, на поверхню форми або компоненту image. Зробити це можно, використавши метод Draw до властивості Canvas. У якості параметрів методу Draw потрібно передати координати точки. Наприклад, оператор
Canvas->Draw(10,20,Plane);
виводить на поверхню форми бітове зображення plane — зображення літака.
Якщо перед застосуванням методу Draw властивості Transparent бітового зображення присвоїти значення true, то фрагменти рисунка, колір яких співпадає з кольором лівої нижньої точки рисунка, не будуть виведені. "Прозорий" колір можна задати і примусово, присвоївши відповідне значення властивості TransparentColor.
Завантаження і виведення бітових зображень на поверхню форми виконує функція обробки події onPaint. Інструкція застосування методу CopyRect в загальному вигляді наступна:
Canvasl->CopyRect(Область1, Canvas2, Область2)
де:
-
Canvas1 — поверхня, на яку виконується копіювання;
-
Canvas2| — поверхня, з якої виконується копіювання;
-
Область1 — структура типу TRect, яка задає положення і розмір області, куди виконується копіювання;
-
Область2 — структура типу TRect, яка задає положення і розмір області, звідки виконується копіювання.
Функції Rect потрібно передати в якості параметрів координати лівого верхнього і правого нижнього кута області, функції Bounds — координати лівого верхнього кута і розмір області. Наприклад, якщо потрібно визначити прямокутну область, то це можно зробити так:
ret = Rect(x1,y1,x2,y2) або так: ret = Bounds(x1,y1,w,h)
де x1, y1 — координати лівого верхнього кута області; х2, у2 — координати правого нижнього кута області; w і h — ширина і висота області.