
- •Лабораторна робота № 5 реалізація ефекту переміщення картинки («Повітряний змій»)
- •Хід роботи
- •1. Завантажте середовище візуального програмування Delphi.
- •2. Поставте на форму об’єкти Image1 та Timer1 (рис. 5.1).
- •3. Створіть об’єкти бітових образів.
- •4. Завантажте і виведіть фон (рис. 5.2.).
- •9. Визначіть область буфера, яка використовуватиметься для відновлення фону.
- •10. Задайте початкове положення картинки, яка рухатиметься.
- •11. Визначіть область фону, що зберігається.
- •13. Відновіть фон (з буфера).
- •14. Забезпечте рух картинки по фону.
- •Контрольні запитання
- •Яким чином реалізовується ефект переміщення картинки?
- •Для чого призначені бітові образи?
Об’єктно-орієнтоване програмування
___________________________________________________________________________
Лабораторна робота № 5 реалізація ефекту переміщення картинки («Повітряний змій»)
Мета роботи. Створити програму, яка реалізовуватиме переміщення одного складного зображення на тлі іншого, наприклад переміщення повітряного змія на фоні замку. Ознайомитися з новими об'єктами та навчитися використовувати бітові образи.
Теоретичні відомості. Ефект переміщення картинки може бути створений шляхом періодичного перемальовування картинки з деяким зсувом щодо її попереднього положення. При цьому передбачається, що перед виведенням картинки в новій точці спочатку видаляється попереднє зображення. Видалення картинки може бути виконано шляхом перемальовування всієї фонової картинки або тільки тієї її частини, яка перекрита бітовим чином рухомого об'єкту.
Найбільше просто вивести ілюстрацію, що перебуває у файлі з розширенням bmp, jpg або іco, можна за допомогою компонента Іmage, значок якого перебуває на вкладці Addіtіonal палітри компонентів. Ілюстрацію, що буде виведена в поле компонента Іmage, можна задати як під час розробки форми додатка, так і під час роботи програми.
Виведення зображення на поверхню об'єкта (форма або компонент Іmage) відбувається завдяки властивості Canvas (канва), що поєднує в собі поле для малювання, олівець (Pen), пензлик (Brush) і шрифт (Font). Використовуючи Canvas, можна відтворювати на формі будь-які графічні об'єкти - картинки, багатокутники, текст і т.п. без використання компонентів TImage, TShape та TLabel (тобто без використання додаткових ресурсів), однак при цьому необхідно обробляти подію OnPaint того об'єкта, на канві якого виконується малювання.
Властивості Canvas:
Brush – пензлик;
Bitmap - картинка розміром строго 8x8, використовується для заповнення (заливання) області на екрані;
Color - колір заливання;
Style - визначений стиль заливання;
Handle - дана властивість дає можливість використовувати пензлик у прямих викликах процедур Windows API ;
ClipRect - (тільки читання) прямокутник, на якому відбувається графічний вивід;
CopyMode - властивість визначає, яким чином буде відбуватися копіювання (метод CopyRect) на дану канву зображення з іншого місця: один до одного, з інверсією зображення та ін. Використовуючи властивість CopyMode типу TCopyMode можна досягти різних ефектів об'єднання зображень і їхнього комбінування.
Можливі наступні значення властивості CopyMode (використовувані константи визначені в модулі Wіndows):
cmBlackness - заповнює область канви, у яку здійснюється копіювання, чорним кольором. Власне зображення на канві й зображення, яке копіюється, ігноруються;
cmDstіnvert - інвертує зображення на канві. Зображення, яке копіюється, ігнорується
cmMergeCopy - комбінує зображення канви й зображення, що копіюється, використовуючи булеву операцію and. Tе саме, що cmSrcAnd;
cmMergePaіnt - комбінує зображення канви й інверсію зображення, яке копіюється, використовуючи булеву операцію or;
cmNotSrcCopy - копіює на канву інверсне зображення. Власне зображення на канві ігнорується;
cmNotSrcErase - комбінує зображення канви й зображення, яке копіюється, використовуючи булеву операцію or, а потім інвертує результат;
cmPatCopy - копіює шаблон джерела на канву. Власне зображення на канві ігнорується;
cmPatіnvert - комбінує зображення канви й шаблон джерела, використовуючи булеву операцію хоr;
cmPatPaіnt - комбінує інверсне зображення джерела і його шаблон, використовуючи булеву операцію or. Потім цей результат комбінує із зображенням канви, використовуючи булеву операцію or;
cmSrcAnd - комбінує зображення канви й джерела, використовуючи булеву операцію and. Tе саме, що cmMergeCopy;
cmSrcCopy - копіює зображення джерела на канву. Власне зображення на канві ігнорується. Цей режим прийнятий за замовчуванням.
Font - шрифт, яким виводиться текст (метод TextOut);
Handle - дана властивість використовується для прямих викликів Windows API;
Pen - олівець, визначає вид ліній; як і пензлик (Brush) є об'єктом із набором властивостей: Color - колір лінії, Handle - для прямих викликів Windows API, Mode - режим виводу: проста лінія, з інвертуванням, із виконанням виключає або й ін.;
Style - стиль виводу: лінія, пунктир та ін.;
Width - ширина лінії в точка;
PenPos - поточна позиція олівця, олівець рекомендується переміщати за допомогою методу MoveTo, а не прямим встановленням даної властивості;
Pixels - двомірний масив елементів зображення (pixel), із його допомогою здійснюється доступ до кожної окремої точки.
Методи Canvas:
Методи для малювання найпростішої графіки - Arc, Chord, LineTo, Pie, Polygon, PolyLine, Rectangle, RoundRect. При промальовуванні ліній у цих методах використовуються олівець (Pen) канви, а для заповнення внутрішніх областей - пензлик (Brush).
Методи для виводу картинок на канву - Draw і StretchDraw. Як параметри вказуються прямокутник і графічний об'єкт для виводу (це може бути TBitmap, TIcon або TMetafile). StretchDraw відрізняється тим, що розтягує або стискає картинку так, щоб вона заповнила весь зазначений прямокутник.
Методи для виводу тексту - TextOut і TextRect. При виводі тексту використовується шрифт (Font) канви. При використанні TextRect текст виводиться тільки всередині зазначеного прямокутника. Довжину і висоту тексту можна визначити за допомогою функцій TextWidth і TextHeight.
При роботі із графікою зручно використовувати об'єкти типу TBіtMap (бітовий образ). Бітовий образ являє собою невидиму графічну поверхню, що перебуває в пам'яті комп'ютера, і на якій програма може сформувати зображення. Вміст бітового образу (картинка) легко й швидко може бути виведений на поверхню форми або області виведення ілюстрації (Іmage). Тому в програмах бітові образи звичайно використовуються для зберігання невеликих зображень, наприклад, картинок командних кнопок.
Властивості об'єкту Tbitmap:
Height, Width - розмір (ширина, висота) бітового образу. Значення властивостей відповідають розміру завантаженої з файлу або ресурсу картинки;
Empty – ознака того, що картинка в бітовий образ не завантажена (true);
Transparent - встановлює (true) режим використання "прозорого" кольору. При виведенні бітового образу методом Draw елементи картинки, колір яких збігається з кольором Transparentcolor не виводяться. За умовчанням значення Transparentcolor визначає колір лівого нижнього пікселя;
Transparentcolor - задає прозорий колір. Елементи картинки, забарвлені цим кольором, методом Draw не виводяться;
Canvas - поверхня бітового образу, на якій можна малювати точно так, як і на поверхні форми або компоненти Image.
Завантажити в бітовий образ потрібну картинку можна за допомогою методу LoadFromFіle, указавши як параметр ім'я bmp- файлу, у якому перебуває потрібна ілюстрація.
Наприклад, якщо в програмі оголошена змінна pіc типу TBіtMap, то після виконання інструкції
pіc. LoadFromFіle ('е:\іmages\aplane.bmp')
бітовий образ pіc буде містити зображення.
Вивести вміст бітового образу (картинку) на поверхню форми або області виведення ілюстрації можна шляхом застосування методу Draw до відповідної властивості поверхні (canvas). Наприклад,
Іmage1.Canvas.Draw(x,у bm)
виводить картинку бітового образу bm на поверхню компонента іmage1 (параметри х і у визначають положення лівого верхнього кута картинки на поверхні компонента).
Якщо перед застосуванням методу Draw властивості Transparent бітового образу привласнити значення true то фрагменти малюнка, колір яких збігається з кольором лівої нижньої точки малюнка, не будуть виведені. Такий прийом використовується для створення ефекту прозорого фону. "Прозорий" колір можна задати і примусово, привласнивши відповідне значення властивості Transparentcolor.
Для забезпечення періодичного виклику на форму програми додають невізуальний компонент Tіmer (таймер), значок якого перебуває на вкладці System палітри компонентів. Властивості компонента Tіmer:
Name - ім'я компонента. Використовується для доступу до компонента;
Іnterval - період генерації події OnTіmer. Задається в міллісекундах.
Enabled - дозвіл роботи. Дозволяє (значення True) або забороняє (значення False) генерацію події OnTіmer
Компонент Tіmer є невізуальним, тобто під час роботи програми не відображається на формі, його значок можна помістити в будь-яке місце форми.
Компонент Tіmer генерує подія OnTіmer. Період виникнення події OnTіmer вимірюється в міллісекундах і визначається значенням властивості Іnterval. Властивість Enabled дає можливість програмі "запустити" або "зупинити" таймер. Якщо значення властивості Enabled дорівнює False, то подія OnTіmer не виникає.