
- •Основнi теоретичнi вiдомостi
- •Координати точок поверхні форми (полотна)
- •Прямокутник
- •Метод Roundrec викреслює прямокутник з кутами, що округляють
- •Коло і еліпс
- •Значення параметрів методу Ellipse визначають вид геометричної фігури
- •Виведення тексту
- •Ілюстрації
- •Значок компоненту Image
- •Варіанти виконання завдання
Лабораторна робота №4
з дисципліни “Комп’ютерна графіка”
Тема: “ Реалізація алгоритмів комп’ютерної графіки на мові програмування Builder C++”
Мета: “Отримати практичні навики реалізації алгоритмів комп’ютерної графіки на мові програмування Builder C++”
Основнi теоретичнi вiдомостi
Для розробки гнучких комп’ютерних програм обробки графічних зображень використовують розповсюджений фірмою Borland програмний пакет С++. Його графічні можливості дозволяють розробляти та обробляти двомірні та тривимірні зображення, створювати анімаційні ефекти, компонувати відеоролики тощо. Розглянемо основні можливості обробки графічних зображень засобами програмування С++, що мають певні особливості їх використання в операційній системі Windows.
Програма, розроблена у середовищі С++виводить графічні зображення на поверхню об’єкта, яким є форма або компоненти Image, PaіntBox. Область ілюстрації Іmage використовується для відображення на формі растрових зображень. Цей компонент формує фон форми та містить такі властивості, як Height, Wіdth, Pіcture, Stretch та інші.
Важливе місце в графічному інструментарії С++займають класи TGraphіc і TPіcture. TGraphіc є абстрактним класом, що використовує загальні властивості й методи своїх нащадків: піктограми (Tіcon), метафайлу (TMetafіle) та растрового зображення TBіtmap. Їх загальною особливістю є те, що вони зберігаються у файлах певного формату. Піктограми являють собою невеликі растрові зображення, забезпечені спеціальними засобами, що регулюють їх прозорість. Зображення піктограми зберігається у файлі з розширенням .ico. Метафайл є зображенням, що побудоване за допомогою спеціальних команд і зберігається у файлах з розширенням .vmf або .emf. Растрові зображення є графічними файлами із стандартним розширенням .bmp. Функціональний клас TPіcture має всі необхідні засоби для роботи з готовими графічними зображеннями: піктограмою, растром та метафайлом. Його властивість Graphіc може охоплювати об'єкти кожного з цих типів.
Під час роботи з графікою зручно використовувати об'єкти бітового образу класу TBіtmap. Бітовий (растровий) образ являє графічну поверхню, на якій програма може формувати зображення. Вміст бітового образу знаходиться у пам'яті комп'ютера та може бути присвоєно змінній, виведено на поверхню форми або в область виведення ілюстрації.
Програмування графіки засобами програмування С++ надає широкі та гнучкі можливості обробки графічних зображень. Грамотне використання класів TCanvas, TBіtmap, TGraphіc, TPіcture дозволяє впроваджувати візуальні аспекти програмування в різні галузі сучасних технологічних розробок.
З розвитком об'єктно-орієнтованого програмування (ООП) почалася розробка об'єктно-орієнтованих бібліотек для роботи з графами. Використання засобів ООП при вирішенні теоретико-графовіх завдань дає істотні переваги в порівнянні з традиційним структурним підходом, оскільки сам граф, його вершини і ребра є "готовими" об'єктами, даними самою природою завдання.
Форма (об'єкт тип Tform) є основою програми. Властивості форми (таблиця. П.1) визначають вид вікна програми.
Таблиця П.1. Властивості форми (об'єкту Tform)
Властивість |
Опис |
Name |
Ім'я форми. У програмі ім'я форми використовується для управління формою і доступу до компонентів форми |
Caption |
Текст заголовка |
Тор |
Відстань від верхньої межі форми до верхньої межі екрану |
Left |
Відстань від лівої межі форми до лівої межі екрану |
Width |
Ширіна форми |
Height |
Висота форми : |
Clientwidth |
Ширіна робочої (клієнтською) області форми, тобто без урахування ширини лівої і правої меж |
Clientheight |
Висота робочої (клієнтською) області форми, тобто без урахування висоти заголовка і ширини нижньої межі форми |
Borderstyle |
Вид межі. Межа може бути звичайною (bssizeable), тонкою (bssingle) або бути відсутнім (bsnone). Якщо біля вікна звичайна межа, то під час роботи програми користувач може за допомогою миші змінити розмір вікна. Змінити розмір вікна з тонкою межею не можна. Якщо межа відсутня, то на екран під час роботи програми буде виведено вікно без заголовка. Положення і розмір такого вікна під час роботи програми змінити не можна |
Borderlcons |
Кнопки управління вікном. Значення властивості визначає, які кнопки управління вікном будуть доступні користувачеві під час роботи програми. Значення властивості задається шляхом привласнення значень уточнюючим властивостям bisystemmenu, biminimize, bimaximize і bihelp. Властивість bisystemmenu визначає доступність кнопки Скрутити і кнопки системного меню biminimize— кнопки Скрутити bimaximize— кнопки Розвернути bihelp — кнопки виведення довідкової інформації |
Icon |
Значок в заголовку діалогового вікна, що позначає кнопку виведення системного меню |
Color |
Колір фону. Колір можна задати, вказавши назву кольору або елемент колірної схеми операційної системи. У другому випадку колір компоненту "прив'язаний" до колірної схеми операційної системи і змінюватиметься при кожній зміні колірної схеми |
Font |
Шрифт. Шрифт, використовуваний "за умовчанням" компонентами, що знаходяться на поверхні форми. Зміна властивості Font форми приводить до автоматичної зміни властивості Font компоненту, розташованого на поверхні форми. Тобто компоненти успадковують властивість Font від форми (є можливість заборонити спадкоємство) |
Canvas |
Поверхня, на яку можна вивести графіку |
Основним классом для роботи з графікою є клас TCanvas. Цей класс є серцевиною графічної си теми Borland C++. Він поєднує в собі „зображення” (вміст конкретного пристрою GDI), „робочі інструменти” (перо, пензлик, шрифти) та набір додаткових функцій для малювання стандартних геометричних примітивів. Canvas — це поверхня (форми або компоненту image), на якій відповідні методи (таблиця. П.25) можуть викреслювати графічні примітиви. Вид графічних елементів визначають властивості поверхні, на якій ці елементи викреслюються (таблиця. П.26).
Таблиця П.25. Методи об'єкту Canvas
Табліца П.26. Властивості об'єкту canvas
|
Об'єкт Реn є властивістю об'єкту Canvas. Властивості об'єкту Реn (таблиця. П.27) визначають колір, стиль і товщину ліній, що викреслюються методами виведення графічних примітивів. Таблиця П.27. Властивості об'єкту Реn
|
Об'єкт Brush є властивістю об'єкту Canvas. Властивості об'єкту Brush (таблиця. П.28) визначають колір, стиль зафарбовування внутрішніх областей контурів, що викреслюються методами виведення графічних примітивів.
Таблиця П.28. Властивості об'єкту Brush
Властивість |
Визначає |
Color |
Колір закрашення замкнутої області |
Style |
Стиль (тип) заповнення області (bssolid— суцільна заливка; bsclear— область не закрашується; bshorizontal— горизонтальне штрихування; bsvertical— вертикальне штрихування; bsfdiagonal — діагональне штрихування з нахилом ліній вперед; bsbdiagonal — діагональне штрихування з нахилом ліній назад; bscross — горизонтально-вертикальне штрихування, в клітку; bsdiagcross — діагональне штрихування, в клітку) |
Математичні функції Таблиця П.30. Математичні функції
Звернете увагу: для того, щоб в програмі були доступні приведені функції, в її текст треба включити директиву #include <math.n>. Величина кута тригонометричних функцій має бути виражена в радіанах. Для перетворення величини кута з градусів в радіани використовується формула (а -3.1415256) / 180, де а— величина кута в градусах; 3.1415926— числа "пі". Замість константи 3.1415926 можна використовувати стандартну іменовану константу M_pi. Константа M_pi визначена у файлі math.h. |
Таблиця П.33. Події
Подія |
Відбувається |
Onclick |
При клацанні кнопкою миші |
Ondblclick |
При подвійному клацанні кнопкою миші |
Onmousedown |
При натисненні кнопки миші |
Onmouseup |
При відпуску кнопки миші |
Onmousemove |
При переміщенні миші |
Onkeypress |
При натисненні клавіші клавіатури |
Onkeydown |
При натисненні клавіші клавіатури. Події Onkeydown і Onkeypress — це події, що чергуються, повторюються, які відбуваються до тих пір, поки не буде відпущена утримувана клавіша (у цей момент відбувається подія Onkeyup) |
Onkeyup |
При відпуску натиснутої клавіші клавіатури |
Oncreate |
При створенні об'єкту (форми, елементу управління). Процедура обробки цієї події зазвичай використовується для ініціалізації змінних, виконання підготовчих дій |
Onpaint |
При появі вікна на екрані на початку роботи програми, після появи частини вікна, яка, наприклад, була закрита іншим вікном і в інших випадках. Подія повідомляє про необхідність відновити (перемальовувати) вікно |
Onenter |
При отриманні елементом управління фокусу |
Onexit |
При втраті елементом управління фокусу |
Методи виведення графічних примітивів розглядають властивість canvas як деяке абстрактне полотно, на якому вони можуть малювати (Canvas переводиться як "поверхня", "полотно для малювання"). Полотно складається з окремих крапок — пікселів. Положення піксела на поверхні полотна характеризується горизонтальною (X) і вертикальною (Y) координатами. Координати зростають зверху вниз і зліва направо. Лівий верхній піксел поверхні форми (клієнтській області) має координати (0, 0), правий ніжній — (ciientwidth, clientheight). Доступ до окремого піксела здійснюється через властивість Pixels що є двовимірним масивом, елементи якого містять інформацію про колір точок полотна.
Слід звернути увагу на важливий момент. Зображення, сформоване на поверхні форми, може бути зіпсоване, наприклад, в результаті повного або часткового перекриття вікна програми іншим вікном. Тому програміст повинен поклопотатися про те, щоб у момент появи вікна програма перемальовувала зіпсоване зображення. На щастя, операційна система Windows інформує програму про необхідність перемальовування вікна, посилаючи їй відповідне повідомлення, внаслідок чого виникає подія Onpaint. Подія Onpaint виникає і у момент запуску програми, коли вікно з'являється на екрані вперше. Таким чином, інструкції, що забезпечують виведення графіки на поверхню форми, треба помістити у функцію обробки події onpaint.