Лабораторна робота № 2

Тема. Синтез статичного зображення в графічному режимі

 

Вступ

Існує два режими роботи дисплея персонального комп'ютера (ПК): символьний і графічний. Другий режим є універсальним і дозволяє створити зображення високої складності, оскільки реалізує керування кольором кожної точки (пікселя) екрану. Можливості графічного режиму визначаються такими параметрами комп'ютерної системи:

1.        роздільною здатністю (допустимою кількістю точок) екрану;

2.        розміром відеопам'яті;

3.        встановленим відеоадаптером (відеоконтролером);

4.        встановленим графічним драйвером.

У наш час дисплеї широкого застосування допускають роздільну здатність 320×200, 640×200, 640×400, 640×350, 720×348, 640×480, 720×350 чи 1024×768. Більш висока роздільна здатність, як правило, застосовується в дисплеях спеціального призначення.

Відеопам'ять (ВП) зберігає код кольору кожного пікселя. У кольоровій палітрі в 4 кольори на кожну точку потрібно 2 біта ВП, у 16 кольорів 4 біта (півбайта). Сучасні дисплеї допускають роботу з палітрою в 224 кольори, тобто на кожен піксель застосовується 24 біта (3 байта) ВП. За обмеженого розміру ВП збільшення кольоровості може привести до зниження роздільної здатності дисплея і навпаки.

Адаптер (відеоадаптер, відеоконтролер, відеокарта) являє собою електронну плату в складі ПК, яка керує роботою дисплея. У наш час у ПК широко застосовуються такі види адаптерів: CGA, EGA, VGA, SVGA і ін. Кожен адаптер, у той же час, допускає декілька графічних підрежимів, які відрізняються кольоровою палітрою, роздільною здатністю та кількістю графічних сторінок.

Графічний режим роботи дисплея потребує також підтримки графічного драйвера спеціальної програми з розширенням .bgi.

Опис середовища програмування

Вивчення графічного режиму здійснюватимемо в середовищі мови програмування TurboPascal. Під час запуску програми по замовчуванню дисплей перебуває в символьному режимі роботи. Для переведення його в графічний режим застосовується спеціальна процедура мови InitGraph (нк, нр, пд), де: нк номер відеокарти. Існують такі номери для найбільш розповсюджених відеокарт: 0 − автоматичне визначення комп'ютером існуючої відеокарти, 1 − CGA; 3 − EGA; 9 − VGA; нр − номер графічного підрежиму для даної відеокарти. Для EGA можливі підрежими: 0 − 640×200, 16 кольорів, 4 графічні сторінки; 1 − 640×350, 16 кольорів, 2 сторінки, а для VGA: 0 − 640×200, 16 кольорів, 4 сторінки; 1 − 640×350, 16 кольорів, 2 сторінки; 2 − 640×480, 16 кольорів, 1 сторінка; пд − шлях до драйвера, тобто стрічка, оформлена у відповідності з синтаксисом, прийнятим у мові TurboPascal, і яка містить маршрут до каталогу з графічним драйвером. Якщо драйвер розміщується в поточному каталозі, то стрічка може бути пустою.

Повернення з графічного режиму дисплея в символьний здійснюється процедурою CloseGraph без параметрів.

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

Установка кольорів фону і зображення здійснюється відповідно процедурами SetBkColor (колір) і SetColor (колір).

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

Для забарвлення фону звичайно застосовують перші 8 кольорів палітри, що потребує для кодування 3 біта. Ще один біт призначений для фіксації режиму мигання символу чи його відсутності. У відеопам'яті ПК зберігається інформація тільки про три останні параметри знакомісця, які представляються одним байтом. Таким чином, під час роботи в символьному режимі одне знакомісце потребує  2 байта відеопам'яті (один на опис вмісту, інший — на опис параметрів), а загальна потреба в такій пам'яті складає всього 4 кБ (формат 80×25) чи 8 кБ (80×50). Низька вимогливість до відеопам'яті робить символьний режим привабливим для синтезу найпростіших зображень (таблиць, стовпчикових діаграм, комп'ютерних ігор.

Під час встановлення графічного режиму по замовчуванню, доступний для роботи весь екран дисплея. Його очищення із зафарбовування кольором фону здійснюється процедурою ClearDevice. При цьому показник поточної позиції встановлюється в точку з координатами (0, 0).

Під час роботи в межах менших ніж екран області можна оформити її у вигляді вікна процедурою SetViewPort (xl, yl, х2, у2, Clip), де: х1, у1— координати лівого верхнього кута вікна; х2, у2 − координати правого нижнього кута вікна; Clip − обмежувач фігур. Якщо CIip=True, то всі побудови здійснюються тільки в межах вікна, в іншому випадку частини фігур можуть виходити за межі вікна.

Процедура ClearViewPort аналогічна за своїми діями процедурі ClеarDеvice, але стосовно вікна.

Графічне зображення може будуватися поточково, за допомогою процедури PutPixel (х, у, колір), де х, у координати пікселя. Номери кольорів відповідають вказаним раніше.

Під час синтезу зображення на основі ліній попередньо потрібно вказати їх параметри за допомогою процедури SetLineStyle (стиль, шаблон, товщина). Параметр стиль може приймати такі значення: 0 – суцільна лінія; 1 – пунктирна; 2 – штрих пунктирна; 3 – штрихова; 4 – задається користувачем. Параметр шаблон визначає вид лінії, який задається користувачем, тобто стилем 4. В іншому  випадку доцільно задати шаблон 0. Параметр товщина може приймати такі значення: 1 нормальна; 3 товста.

За допомогою ліній можна будувати такі фігури:

1.                     дугу на основі процедури Arc (х, у, а1, а2, r), де: х, у – координати центра дуги, а1 – кут до початкової точки дуги, який відраховується проти годинникової стрілки від горизонтальної вісі, направленої зліва направо, а2 – кут до кінцевої точки дуги, який відраховується проти годинникової стрілки від горизонтальної вісі, направленої зліва направо, r – радіус дуги;

2.                     коло на основі процедури Circle (х, у, r), де: х, у координати центра кола, r радіус кола;

3.                     пряму лінію на основі процедур: Line (xl, у1, х2, у2), де х1, у1, х2, у2 координати точок, між якими проводиться лінія;

LineRel (Dx, Dy), де: Dx, Dy – зміщення координат точки кінця лінії по відношенню до координат початкової точки;

LineTo (х, у), де х, у координати точки, в яку проводиться лінія з поточної точки.

Дві останні процедури мають на увазі, що показник координат вже встановлений в початкову точку лінії. Дана операція може бути виконана за допомогою процедур MoveTo (х, у) чи MoveRel (Dx, Dy). Значення параметрів х, у, Dx, Dy визначені раніше;

4.                     прямокутник за допомогою процедури Rectangle (xl, yl, х2, у2), де: х1, у1 координати лівого верхнього кута прямокутника, а х2, у2 правого нижнього; TurboPascal містить також процедури побудови зафарбованих фігур;

5.                     зафарбований прямокутник на основі процедури Bar (xl, у1, х2, у2). Значення параметрів пояснене вище;

6.                     сектор кола на основі процедури PieSlice (х, у, а1, а2, r). Значення параметрів аналогічні процедурі Arc.

Зафарбовані фігури передбачають попереднє встановлення стилю заповнення за допомогою процедури SetFillStyle (шаблон, колір), де шаблон допускає такі значення:

0 – заповнення кольором фону,

1 однорідне заповнення вказаним у даній процедурі кольором,

2 заповнення - - - -,

3 заповнення ///,

4 заповнення товстими ///,

5 заповнення товстими \\\,

6 заповнення \\\,

7 заповнення кліткою,

8 заповнення косою кліткою,

9 заповнення густою сіткою,

10    - заповнення рідкими точками,

11 - заповнення густими крапками.

Споживач може сам побудувати замкнений контур і зробити його заповнення за допомогою процедури FloodFill (х, у, контур), де: х, у – координати будь-якої точки всередині зафарбовуючої області, контур – колір лінії контуру, всередині якого здійснюється зафарбовування.

Приклад складання програми. Створити програму, яка реалізує графічними засобами мови програмування Turbo Pascal таке статичне зображення: фасад будинку з двома вікнами.

Лістинг програми

program s;

uses crt, graph;

var

driver, mode:integer;

begin

clrscr;

driver:=0;

mode:=0;

InitGraph (driver,mode,’’);

rectangle (200,200,300,300);

rectangle (210,230,230,270);

rectangle (270,230,290,270);

line (200,200,250,150);

line (250,150,300,200);

readln;

end.

 

Варіанти завдань

Створити програму, яка реалізує графічними засобами мови програмування TurboPascal таке статичне зображення:

1.                     голубе небо, червоне сонце, синє море;

2.                     годинник із годинною, хвилинною і секундною стрілками різного кольору;

3.                     стакан води з трьома бульбашками повітря;

4.                     червоне сонце з десятьма вихідними промінцями;

5.                     в’язку різнокольорових куль;

6.                     стилізоване зображення крану;

7.                     колесо з шістьма спицями різного кольору;

8.                     дорожній знак „цеглина»;

9.                     світлофор;

10.                 стіл більярду з трьома кулями;

11.                 вертикальний термометр;

12.                 жовтий прямокутник із червоним контуром; всередині прямокутника симетрично розмістити чотири білих кола з зеленим контуром;

13.                 драбину з восьми перекладин;

14.                 стилізоване зображення парашуту;

15.                 диск телефону;

16.                 тріумфальну арку;

17.                 анфас    письмового столу з двома тумбами;

18.                 шахову дошку;

19.                 м’яч,        верхня половина якого зафарбована в жовтий, нижня в зелений колір, а посередині червона смуга;

20.                 букву „Н» висотою в половину екрану, елементи букви різного кольору;

21.                 зелене дерево;

22.                 м’яч всередині деякої труби;

23.                 м’яч на поверхні;

24.                 кулька і сходи вверх;

25.                 циркового клоуна;

26.                 цар-рибу;

27.                 людину з мультфільму «Папка, палка, огуречек…»;

28.                 хмару, сонце;

29.                 телевізор, всередині якого риба;

30.                 ялинку, падаючий сніг.

Зміст звіту

1)                    Зміст завдання;

2)                    лістинг програми;

3)                    надруковане зображення.

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

1.                     Які параметри лінії потрібно вказати під час застосування даного графічного примітива?

2.                     Які параметри потрібно задати під час переходу до графічного режиму?

3.                     Які процедури переміщують вказівник по екрану в графічному режимі?

4.                     Що таке піксель?

5.                     Чи можна засобами графіки наносити на екран комп’ютера зафарбований трикутник?