- •Лабораторна робота № 5 реалізація ефекту переміщення картинки («Повітряний змій»)
- •Хід роботи
- •1. Завантажте середовище візуального програмування Delphi.
- •2. Поставте на форму об’єкти Image1 та Timer1 (рис. 5.1).
- •3. Створіть об’єкти бітових образів.
- •4. Завантажте і виведіть фон (рис. 5.2.).
- •9. Визначіть область буфера, яка використовуватиметься для відновлення фону.
- •13. Відновіть фон (з буфера).
- •14. Забезпечте рух картинки по фону.
- •Контрольні запитання
- •Яким чином реалізовується ефект переміщення картинки?
- •Для чого призначені бітові образи?
- •10. Задайте початкове положення картинки, яка рухатиметься.
- •11. Визначіть область фону, що зберігається.
Хід роботи
1. Завантажте середовище візуального програмування Delphi.
2. Поставте на форму об’єкти Image1 та Timer1 (рис. 5.1).
Компонент image використовується для виведення фону, а компонент Timer - для організації затримки між циклами видалення і виведення на новому місці зображення.
Рис.5.1. Форма програми «Повітряний змій»
3. Створіть об’єкти бітових образів.
Встановіть для форми обробник події OnActivate.
Для зберігання бітових образів (картинок) фону і літака, а також копії області фону, що перекривається зображенням літака, використовуються об'єкти типу TBitMap, які створюються динамічно процедурою FormActivate. Ця ж процедура завантажує з файлів картинки фону (p1.bmp) і повітряного змія (zmij2.bmp), а також зберігає область фону, на яку перший раз накладатиметься картинка.
Оголосіть змінні типу TBіtMap (бітовий образ) в розділі оголошень змінних:
fon, zmij, Buf : TBitMap; // фон, змій, буфер
Для створення об'єктів - бітових образів використайте метод Create.
fon:= TBitmap.Create; // фон
zmij:= TBitmap.Create; // змій
Buf := TBitmap.Create; // буфер
4. Завантажте і виведіть фон (рис. 5.2.).
Завантажити в бітовий образ fon потрібну картинку можна за допомогою методу LoadFromFіle, указавши як параметр ім'я BMP-файлу, у якому перебуває потрібна ілюстрація (наприклад, 'F:\p1.bmp).
fon.LoadFromFile('F:\p1.bmp');
Рис.5.2. Результат завантаження фону в бітовий образ
Вивести вміст бітового образу (картинку) на поверхню форми або області виведення ілюстрації можна шляхом застосування методу Draw до відповідної властивості поверхні (canvas).
Form1.Image1.canvas.Draw(0,0,fon);
5. Забезпечте, щоб розміри форми та зображення співпадали.
form1.Height:=fon.Height;
form1.width:=fon.width;
6. Завантажте картинку, яка буде рухатися.
Для цього використайте метод LoadFromFіle.
zmij.LoadFromFile('F:\zmij2.bmp');
7. Зробіть прозорим фон картинки, яка буде рухатися.
Визначіть "прозорий" колір наступним чином
zmij.Transparent := True;
zmij.TransParentColor := zmij.canvas.pixels[1,1];
8. Створіть буфер для збереження копії області фону на яку накладається картинка, що рухається.
Для цього оголосіть змінні W, Н – ширина та висота картинки, яка рухатиметься і задайте їм відповідні значення:
W:= zmij.Width;
H:= zmij.Height;
Відповідно задайте ці розміри і для бітового образу, в якому зберігатиметься копія області фону на яку накладається картинка, що рухається.
Buf.Width:= W;
Buf.Height:=H;
Забезпечте відповідність палітр.
Buf.Palette:=fon.Palette;
Buf.Canvas.CopyMode:=cmSrcCopy;
9. Визначіть область буфера, яка використовуватиметься для відновлення фону.
Збереження копії фону виконується за допомогою методу CopyRect, який дозволяє виконати копіювання прямокутного фрагмента одного бітового образу в іншій. Об'єкт, до якого застосовується метод CopyRect, є приймачем копії бітового образу. Як параметри методу передаються координати і розмір області, куди повинно бути виконано копіювання, поверхню, звідки повинно бути виконано копіювання, а також положення і розмір копійованої області. Інформація про положення і розмір копійованої в буфер області фону, на яку буде накладене зображення повітряного змія і яка згодом повинна бути відновлена з буфера, знаходиться в структурі BackRеt типу TRect. Для заповнення цієї структури використовується функція Bounds.
Для цього оголосіть змінні:
BackRеt : TRect; // область фону, яка повинна бути відновлена з буфера
BufRet: TRect; // область буфера, яка використовується для відновлення фону.
За допомогою властивості Bounds визначіть область буфера, яка використовуватиметься для відновлення фону:
BufRуt:=Bounds(0,0,W,H);
