Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПР_14

.pdf
Скачиваний:
3
Добавлен:
19.02.2016
Размер:
214.14 Кб
Скачать

Міністерство транспорту та зв’язку України Львівський коледж Державного університету інформаційно –

комунікаційних технологій

Розглянуто на засіданні циклової комісії

обслуговування комп’ютерної техніки протокол № __ від _______ 2010р.

Голова циклової комісії

______________ Кужій Л.І.

Затверджую Заступник директора з НВР

"___" ___________ 2010 р.

___________ Плешівський Я.М.

Дисципліна “ Програмування ”

Інструкція до

Практична робота №14

Створення програм для виведення зображень та використання бітових образів.

Укладач: Селемонавічус А.А.

Львів 2010 р.

2

1. Мета роботи

Навчитись реалізовувати програми для виведення на форму зображень різних форматів на мові Object Pascal та використовувати об’єкти типу TBitMap (бітовий образ).

2. Теоретичні відомості.

Вивід ілюстрацій

Найбільш просто вивести ілюстрацію, що перебуває у файлі з розширенням bmp, jpg або ico, можна за допомогою компонента image, значок якого перебуває на вкладці Additional палітри (рисунок 1.11).

Рис. 1.11. Значок компонента Image

У таблиці 1.8 перераховані основні властивості компонента image. Таблиця 1.8. Властивості компонента image

Властивість

Визначає

 

 

Picture

Ілюстрація, що відображається в поле компонента

Width, Height

Розмір компонента. Якщо розмір компонента менше

 

розміру ілюстрації, і значення властивостей AutoSize і strech

 

дорівнює False, то відображається частина ілюстрації

AutoSize

Ознака автоматичної зміни розміру компонента

 

відповідно до реального розміру ілюстрації

Strech

Ознака автоматичного масштабування ілюстрації

 

відповідно до реального розміру компонента. Щоб було

 

виконане масштабування, значення властивості AutoSize

 

повинне бути False

Visible

Чи відображається компонент, і, відповідно, ілюстрація,

 

на поверхні форми

 

 

Ілюстрацію, що буде виведена в поле компонента image, можна задати як під час розробки форми додатка, так і під час роботи програми.

Під час розробки форми ілюстрація задається установкою значення властивості picture шляхом вибору файлу ілюстрації в стандартному діалоговому вікні, що з'являється в результаті кліка на командній кнопці Load вікна Picture Editor (рисунок 1.12). Щоб запустити Image Editor, потрібно у вікні Object Inspector вибрати властивість Picture і клацнути на кнопці із трьома крапками.

Якщо розмір ілюстрації більше розміру компонента, то властивості strech потрібно привласнити значення True і встановити значення властивостей width і Height пропорційно реальним розмірам ілюстрації.

3

Щоб вивести ілюстрацію в поле компонента image під час роботи програми, потрібно застосувати метод LoadFromFile до властивості Picture, вказавши як параметр ім'я файлу ілюстрації. Наприклад, інструкція

Form1.Image1.Picture.LoadFromFile('с:\temp\bart.bmp')

завантажує ілюстрацію з файлу bart.bmp і виводить її в поле виводу ілюстрації (image1).

Метод LoadFromFile дозволяє відображати ілюстрації різних графічних форматів: BMP, WMF, JPEG (файли з розширенням jpg).

Рис. 1.12. Вікно Picture Editor

Бітові образи

При роботі із графікою зручно використати об'єкти типу TBitMap (бітовий образ). Бітовий образ являє собою невидиму графічну поверхню, що знаходиться в пам’яті комп'ютера, на якій програма може сформувати зображення. Вміст бітового образа (картинка) легко і, що особливо важливо, швидко може бути виведений на поверхню форми або області виводу ілюстрації (image). Тому в програмах бітові образи звичайно використаються для зберігання невеликих зображень, наприклад, картинок командних кнопок.

Завантажити в бітовий образ потрібну картинку можна за допомогою методу LoadFromFlie, вказавши як параметр ім'я BMP-файлу, у якому перебуває потрібна ілюстрація.

Наприклад, якщо в програмі оголошена змінна pic типу TBitMap, то після виконання інструкції

pic.LoadFromFile('с:\images\aplane.bmp')

бітовий образ pic буде містити зображення літака.

Вивести вміст бітового образа (картинку) на поверхню форми або області виводу ілюстрації можна шляхом застосування методу Draw до відповідної властивості поверхні (canvas). Наприклад, інструкція

Image1.Canvas.Draw(x,у, bm)

виводить картинку бітового образа bm на поверхню компонента image1 (параметри х и у визначають положення лівого верхнього кута картинки на поверхні компонента).

4

Якщо перед застосуванням методу Draw властивості Transparent об'єкта TBitMap привласнити значення True, то фрагменти малюнка, які пофарбовані кольорами, що збігається з кольорами лівого нижнього кута картинки, не будуть виведені - через них буде як би переглядати тло. Якщо в якості "прозорого" потрібно використати кольори, відмінні від кольорів лівої нижньої точки малюнка, то властивості Transparentcolor варто привласнити значення символьної константи, що позначає необхідні кольори.

Мультиплікація

Під мультиплікацією звичайно розуміється рисунок, що рухається і міняється. У найпростішому випадку рисунок може тільки рухатися або тільки мінятися.

Рисунок може бути сформований із графічних примітивів (ліній, окружностей, дуг, багатокутників і т.д.). Забезпечити переміщення рисунка досить просто: треба спочатку вивести рисунок на екран, потім через якийсь час стерти його і знову вивести цей же рисунок, але вже на деякій відстані від його початкового положення. Підбором часу між виводом і видаленням рисунку, а також відстані між старим і новим положенням рисунка (кроку переміщення), можна домогтися того, що в спостерігача буде складатися враження, що рисунок рівномірно рухається по екрані.

Щоб задавати часовий інтервал використовується компонент Timer, значок якого перебуває на вкладці System палітри компонентів (рисунок 1.16). Властивості компонента Timer, перераховані в таблиці 1.9.

 

Рис. 1.16. Значок компонента Timer

Таблиця 1.9. Властивості компонента Timer

Властивість

Визначає

 

 

Name

Ім'я компонента. Використовується для доступу до

 

компонента

Interval

Період генерації події OnTimer. Задається в

 

мілісекундах

Enabled

Дозвіл роботи. Дозволяє (значення True) або забороняє

 

(значення False) генерацію події OnTimer

Додається компонент Timer до форми звичайним образом, однак, оскільки компонент Timer є невізуальним, тобто під час роботи програми не відображається на формі, його значок можна помістити в будь-яке місце форми.

Компонент Timer генерує подію OnTimer. Період виникнення події OnTimer вимірюється в мілісекундах і визначається значенням властивості Interval. Варто звернути увагу на властивість Enabled. Вона дає можливість програмі "запустити"

5

або "зупинити" таймер. Якщо значення властивості Enabled дорівнює False, то подія OnTimer не виникає.

3.Підготовка до виконання роботи.

3.1.Підготувати бланк звіту з роботи;

3.2.Опрацювати теоретичний матеріал за темою роботи;

3.3.Використовуючи теоретичний матеріал дати відповіді на контрольні запитання.

4.Контрольні питання

1)Який компонент дозволяє виводити зображення?

2)Яка властивість компоненту image дозволяє масштабувати зображення?

3)Як запустити програму Image Editor?

4)Що дозволяє робити метод LoadFromFile?

5)Що таке бітовий образ?

6)Як зробити тло малюнка прозорим?

7)Поясність як створити примітивну мультиплікацію?

8)Для чого потрібен компонент Timer?

9)В чому вимірюється період виникнення події OnTimer?

5.Обладнання та програмне забезпечення

5.1.Персональний комп’ютер з операційною системою Windows;

5.2.Програма Delphi

6.Порядок виконання роботи

6.1.Запустити програму Delphi;

6.2.Реалізувати наведені приклади задач 1 – 3 з використанням програми

Delphi.

6.3.Переробити наведену програму згідно індивідуальних завдань.

Задача 1. Програма, текст якої наведений у лістингу 1.6, використовує компонент image для перегляду ілюстрацій, які перебувають у зазначеному користувачем каталозі. Діалогове вікно програми наведене на рисунку 1.13.

6

Рис. 1.13. Слайд-проєктор

Лістинг 1.6. Слайд-проєктор unit shpic_;

interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Menu type

TForm1 = class(TForm) Image1: ТImage; Button1: TButton;

procedure FormActivate(Sender: TObject); procedure ButtonlClick(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

var

Form1: TForm1; aSearchRec : TSearchRec;

aPath : String; // каталог, у якому перебувають ілюстрації aFile : String; // файл ілюстрації

iw,ih: integer; // первісний розмір компонента Image implementation

$R *.DFM}

// зміна розміру області виводу ілюстрації // пропорційно розміру ілюстрації

Procedure Scalelmage; var

pw, ph : integer; // розмір ілюстрації

7

scale, scale : real; // масштаб по Х і Y scale : real; // загальний масштаб begin

//ілюстрація вже завантажена

//одержимо її розміри

pw := Form1.Image1.Picture.Width; ph := Form1.Image1.Picture.Height;

if pw > iw // ширина ілюстрації більше ширини компонента Image then scale := iw/pw // потрібно масштабувати

else scale := 1;

if ph > ih // висота ілюстрації більше висоти компонента then scale := ih/ph // потрібно масштабувати

else scale := 1;

//виберемо найменший коефіцієнт if scale < scale

then scale := scale else scale := scale;

//змінимо розмір області виводу ілюстрації

Form1.Image1.Height := Round(Form1.Image1.Picture.Height*scale)

Form1.Image1.Width := Round(Form1.Image1.Picture.Width*scale);

//т. к. Strech = True і розмір області пропорційний

//розміру картинки, то картинка масштабується без перекручувань end;

//вивести першу ілюстрацію

procedure FirstPicture; var

r : integer; // результат пошуку файлу begin

aPath := 'f:\temp\';

r := FindFirst(aPath+'*.bmp',faAnyFile,aSearchRec); if г = 0 then

begin // у зазначеному каталозі є bmp-файл aFile := aPath + aSearchRec.Name;

Form1.Image1.Picture.LoadFromFile(aFile); // завантажити

// ілюстрацію

Scalelmage; //- встановити розмір компонента

Image r := FindNext(aSearchRec); // знайти наступний файл if r = 0 then // ще є файли ілюстрацій

Forml.Button1.Enabled := True; end;

end;

// вивести наступну ілюстрацію

Procedure NextPicture(); var

r : integer;

8

begin

aFile := aPath + aSearchRec.Name; Forml.Image1.Picture.LoadFromFile(aFile); Scalelmage;

// підготуємо вивід наступної ілюстрації

r := FindNext(aSearchRec); // знайти наступний файл if r<>0

then // більше немає ілюстрацій

Forml.Buttonl.Enabled := False; end;

procedure TForml.FormActivate(Sender: TObject); begin

Image1.AutoSize := False; // заборона автоматичної зміни розміру компонента

Image1.Stretch := True; // дозвіл масштабування

// запам'ятаємо початковий розмір області виводу ілюстрації iw := Imagel.Width;

in := imagel.Height;

Button1.Enabled := False; // зробимо недоступною кнопку Далі FirstPicture; // вивести першу ілюстрацію

end;

//клік на кнопці Далі

procedure TForm1.Button1Click(Sender: TObject); begin

NextPicture;

end;

end.

Програма виконує масштабування виведених ілюстрацій без перекручування, чого не можна домогтися простим присвоєнням значення True властивості strech. Завантаження і вивід першої і іншої ілюстрацій виконують відповідно процедури FirstPicture і NextPicture. Процедура FirstPicture використає функцію FindFirst для того, щоб одержати ім'я першого BMP-файлу. Як параметри функції FindFirst передаються:

ім'я каталогу, у якому повинні перебувати ілюстрації;

структура asearchRec, поле Name якої, у випадку успіху, буде містити ім'я файлу, що задовольняє критерію пошуку;

маска файлу ілюстрації.

Якщо в зазначеному при виклику функції FindFirst каталозі є хоча б один BMP-файл, значення функції буде дорівнює нулю. У цьому випадку метод LoadFromFile завантажує файл ілюстрації, після чого викликається функція scaleimage, що встановлює розмір компонента пропорційно розміру ілюстрації. Розмір завантаженої ілюстрації можна одержати, звернувшись до властивостей

Form1.Image1.Picture.Width та Form1.Image1.Picture.Height, значення яких не залежать від розміру компонента Image.

9

Задача 2. Наступна програма, текст якої наведений у лістингу 1.7, демонструє використання бітових образів для формування зображення з декількох елементів.

Лістинг 1.7. Використання бітових образів unit aplanes_; interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs; type

TForml = class(TForm)

procedure FormPaint(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

var

Forml: TForm1;

sky,aplane: TBitMap; // бітові образи: небо і літак implementation

($R *.DFM}

procedure TForm1.FormPaint(Sender: TObject); begin

// створити бітові образи sky := TBitMap.Create; aplane := TBitMap.Create; // завантажити картинки sky.LoadFromFile('sky.bmp');

aplane.LoadFromFile('aplane.bmp') ; Form1.Canvas.Draw(0,0,sky); // промальовка тла Form1.Canvas.Draw(20,20,aplane); // промальовка лівого літака aplane.Transparent:=True;

// тепер елементи малюнка, кольори яких збігаються з кольорами // лівої нижньої точки бітового образа, не промальовуються

Form1.Canvas.Draw(120,20,aplane);

//промальовка правого літака

//звільнити пам'ять sky.free; aplane.free; end;

end.

Після запуску програми у вікні додатку (рисунок 1.14) з'являється

зображення літаків, що летять на тлі неба. Тло і зображення літака - бітові образи, що завантажуються із файлів. Біле поле навколо лівого літака показує дійсний розмір картинки бітового образу aplane. Біле поле навколо правого літака відсутнє, тому що перед його виводом властивості Transparent бітового образа було привласнене значення True.

10

Рис. 1.14. Вплив значення властивості Transparent на вивід зображення Задача 3. Наступна програма, текст якої наведений у лістингу 1.8, а вид

форми - на рисунку 1.15, демонструє рух кола від лівої до правої границі вікна програми.

Рис. 1.15. Форма програми Коло, що рухається

Лістинг 1.8. Коло, що рухається unit mcircle_;

interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls; type

TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject}; procedure FormActivate(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

implementation {$R *.DFM} var

Form1: TForml;

x,y: byte; // координати центра окружності

dx: byte; // збільшення координати x при русі окружності // стирає і малює окружність на новому місці

procedure Ris; begin

// стерти окружність form1.Canvas.Pen.Color:=form1.Color;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]