Можливості графічної підсистеми Delphi 5
Лабораторна робота №3
Робота з графікою
Мета роботи: вивчити можливості графічної підсистеми Delphi 5, її властивості та принципи побудови прикладних програм з використанням графіки.
Порядок роботи:
Створити проект для виконання індивідуального завдання.
Оформити звіт для захисту лабораторної роботи за зразком
назва роботи
мета роботи
порядок роботи
короткі теоретичні відомості
алгоритм розв’язку задачі
тексти відповідних модулів проекту
аналіз отриманих результатів та висновки
Питання для самоконтролю
1. Які класи відповідають за роботу з графікою в Delphi?
2. Які графічні інструменти представлені в Delphi?
3. Охарактеризуйте властивості та методи класу TCanvas.
4. Які існують типи графічних зображень?
5. Як завантажити на форму зображення з файлу?
delphi клас графічний зображення
Короткі теоретичні відомості
Створення зображень
У Win32 для малювання об’єктів, які ми бачимо на екрані комп’ютера використовується інтерфейс GDI (Graphic Device Interface). До появи Delphi програміст безпосередньо працював з функціями та інструментами GDI (пером, пензлем та шрифтом) через графічний контекст вікна.
Для використання графічних інструментів Windows у Delphi створені відповідні класи: для графічного контексту - клас TCanvas, для пера - TPen, для пензля – TBrush, для шрифту - TFont. Об’єкти цих класів автоматично створюються для форми і більшості видимих елементів на формі і стають доступними через властивості Canvas, Pen, Brush та Font.
Наступні два приклади демонструють наскільки застосування Delphi спрощує роботу з графікою в Win32. Приклад 1 використовує стандартні GDI-функції, приклад 2 створює аналогічний малюнок засобами класів Delphi.
Приклад 1
procedure TForm1.FormPaint(Sender: TObject);
var
PaintDC : HDC;
PenHandle, OldPenHandle: HPEN;
BrushHandle, OldBrushHandle: HBRUSH;
begin
PaintDC: = GetDC(Handle);{ отримати графічний контекст форми }
PenHandle: = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));{ створити синє перо }
OldPenHandle: = SelectObject(PaintDC, PenHandle);{ використати його у графічному контексті }
BrushHandle: = CreateSolidBrush(RGB(255, 255, 0));{ створити жовтий пензель }
OldBrushHandle: = SelectObject(PaintDC, BrushHandle);{ використати його у графічному контексті }
Ellipse(PaintDC, 10, 10, 50, 50);{ намалювати еліпс }
SelectObject(PaintDC, OldBrushHandle);
{ відновити попередній пензель }
DeleteObject(BrushHandle);{ знищити жовтий пензель }
SelectObject(PaintDC, OldPenHandle);{ відновити попереднє перо }
DeleteObject(PenHandle);{ знищити синє перо }
end;
Приклад 2
procedure TForm1.FormPaint(Sender: TObject);beginwith Canvas do { працюємо з властивістю Canvas класу TForm }beginPen.Color: = clBlue;{ створити синє перо }
Brush.Color: = clYellow;{ створити жовтий пензель }
Ellipse(10, 10, 50, 50);{ намалювати еліпс }end;end;
Canvas (канва, полотно) - це площа видимого елемента на формі, на якій можна малювати (графічний контекст вікна). Вона є однією з властивостей видимого елемента. Font, Pen та Brush є підвластивостями Canvas.
Деякі видимі елементи не мають властивість Canvas, наприклад панелі - компоненти класу TPanel. На таких компонентах можна малювати, якщо розмістити на них спеціальну компоненту класу TPaintBox. Крім того об’єкти PaintBox можна використовувати для обмеження на формі чи на деякій компоненті ділянки малювання одним чи декількома прямокутниками.
У процесі розробки проекту властивість Canvas недоступна у вікні Object Inspector. Щоб використати Canvas слід присвоїти її підвластивостям необхідні значення та викликати потрібні методи (див. приклад 2).
Клас TCanvas інкапсулює графіку Windows різного рівня. До нього включені функції високого рівня для малювання ліній, фігур або тексту, можливості середнього рівня для роботи з графічними інструментами та можливості найнижчого рівня - безпосереднього доступу до об’єктів Win32 GDI.
Наступна таблиця ілюструє можливості TСanvas.
Рівень |
Операції |
Інструменти |
Вищий |
Малювання ліній та фігур Зміна розмірів та вивід тексту Зафарбовування площини фігури |
MoveTo, LineTo, Rectangle, Ellipse (методи) TextOut, TextHeight, TextWidth, TextRect (методи) FillRect, FloodFill (методи) |
Середній |
Маніпулювання графічними інструментами Маніпулювання пікселами Копіювання та переміщення зображень |
Pen, Brush, Font (властивості) Pixels (властивість) Draw, StretchDraw, BrushCopy, CopyRect (методи) CopyMode (властивість) |
Нижчий |
Виклик функцій Win32 GDI |
Handle (властивість) |
Pen (перо) - це лінія, яка виділяє зовнішній контур фігури. Можна задавати товщину (підвластивість Width), колір (Color), вигляд (Style), спосіб малювання лінії (накладання кольору лінії на поверхню - Mode).
Brush (пензель) - це площина фігури, тобто внутрішня від контуру частина. Можна задавати колір (Color) та спосіб зафарбовування (Style), наприклад, горизонтальними чи діагональними лініями.
Font (шрифт) - використовують для опису шрифтів, які застосовують під час виведення тексту (за допомогою методів TextOut або TextRect класу TCanvas). Має підвластивості Name (назва), Style (стиль), Color (колір), Size (розмір).
Опрацювання зображень
Клас TGraphic у Delphi забезпечує базові інструменти для використання графічних файлів. Для опрацювання графічних зображень різних форматів введені дочірні класи: TBitmap - растрові файли (*.bmp), TMetafile - метафайли Windows (*.wmf, *.emf), та TIcon - піктограми (*.ico). Також можна ввести власні дочірні класи.
Растрові файли (bitmaps) - це файли з двійковою інформацією у вигляді бітів, послідовність яких складає графічний образ. Зокрема, в цих бітах зберігається інформація про колір пікселів. Растри бувають двох типів - залежні від пристроїв(device dependent bitmaps - DDB) і незалежні (device independent bitmaps - DIB).
На відміну від растрів, метафайли - це векторні графічні зображення, що надає можливість довільної зміни розмірів, без впливу на гладкість ліній і дуг, на відміну від растрових зображень.
Піктограми - це ресурси, що, як правило, зберігаються у файлі з розширенням (*.ico) або у файлах ресурсів з розширенням (*.res). Існує два типових розміри піктограм у 32-бітних версіях Windows: великі (3232) та малі (1616). У всіх прикладних програмах для Windows використовуються обидва розміри. Малі піктограми розміщуються в лівому верхньому куті головного вікна прикладної програми, а також в елементах управління Windows, що представляють списки, великі піктограми можна розмістити на панелі задач прикладної програми або у вікні повідомлення.
Для виведення малюнків на екран використовується клас TImage. За допомогою відповідної компоненти (сторінка палітри Additional) можна завантажити та відобразити в будь-якому місці екрану чи форми файл будь-якого формату, що опрацьовуються класами-нащадками TGraphic. Графічні дані зберігаються у властивості Рicture (класу TPicture) об’єкта TImage. Клас TPicture є контейнером для графіки, тобто може містити будь-який зі згаданих класів графічних файлів. Для завантаження та збереження зображення використовують відповідні методи класу TPicture, наприклад:
MyImage.Picture.LoadFromFile('FileName.BMP');
Для копіювання зображень використовуються методи TCanvas Draw (копіювання всього малюнку), StretchDraw (копіювання всього малюнку зі зміною розміру (стиск або розтяг)), CopyRect (копіювання частини малюнку), BrushCopy (копіювання малюнку разом з растровими операціями). Для копіювання одного растру в інший можна застосувати метод TBitmap Assign.
Завдання
Створити програму, яка будує криві за заданим параметричним представленням (варіанти 1, 3, 5, 7, 9, 11, 13, 15, 17) або по їх рівняннях у полярних координатах (варіанти 2, 4, 6, 8, 10, 12, 14, 16, 18).
Параметричне представлення кривої на площині з координатами - це дві функції , , визначені на одній і тій самій числовій множині.
Полярні координати точки на площині - це відстань від фіксованої точки (полюса) до точки і кут між і полярною віссю (променем) .
1. Трактриса
, , ,
2. Спіраль "жезл"
, .
3. Суперколо
, , ,
4. Лемніската
, , .
5. Циссоїда
, , , .
6. Синусоїдальна спіраль
, , .
7. Кардіоїда
, , ,
8. Спіраль Кейлі шостого порядку
, .
9. Циклоїда
, , ,
10. Спіраль Архімеда
, .
11. Строфоїда
, , , .
12. Квадратична спіраль
, .
13. Дельтоїд
, , ,
14. Трисектриса
, .
15. Астроїда
, ,
16. Спіраль Ферма
, .
17. Евольвента кола
, , ,
18. Логарифмічна спіраль
, , .