Відображення на екрані дисплея графічної інформації

Житомирський Військовий Інститут

Національного Авіаційного Уніврситету























Реферат на тему:

Відображення на екрані дисплея графічної інформації



























Житомир 2010


План



		Графічний режим роботи дисплейних адаптерів. Типи драйверів

		Модуль GRAPH. Ініціалізація і завершення графічного режиму

		Структура графічної Паскаль-програми

		Помилки ініціалізації графічного режиму та їх обробка

		Процедури та функції роботи з відеорежимами

		 Побудови графічних об’єктів




Графічні режими роботи дисплейних адаптерів. Типи драйверів



Починаючи з версії 4.0 у склад ТР входить бібліотека графічних підпрограм (модуль GRAPH).,яке забезпечує керування режимами різних адаптерів дисплеїв; вона містить 80 графічних процедур та функцій а також стандартних констант і описів типів даних.Стандартний стан ПК після його вимикання, а також до запуску Паскаль-програм відповідає роботі режиму у текстовому режимі. Для виконання графічних засобів потрібно ініціалізувати графічний режим режим роботи дисплейного адаптера. Настройка графічних процедур на роботу з графічним адаптером досягається шляхом підключення відповідного графічного драйвера. Таким чином графічний драйвер керує графічним адаптером в графічному режимі роботи.





драйвери

адаптери

монітори



Основні характеристики моніторів та адаптерів:

розмір екрану по діагоналі (9, 14, 15, 17, 20, 21 дюйм);

розмір мінімального елементу зображення (0,25..,28 мм). Для кольорових – моніторна група – 3 зерна;

роздільна здібність – це кількість точок (пікселів) по горизонталі та вертикалі;

об’єм відеопам’яті (16 Кб – 1 Мб).

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

Крім того деякі графічні адаптери мають можливість працювати з декількома графічними сторінками – це область ОЗП, яка використовується для створення "карти" екрана (тобто інформація про світимість кожного пікселя).

Графічні драйвери

Представляють собою файли з розширенням .BGI, які забезпечують взаємодію програм з графічними пристроями і містяться в окремому каталозі (BGI). {*BGI – Borland Graphics Interface – графічний шнтерфейс фірми Borland}. В процесі ініціалізації визначеного графічного режиму вмикається відповідний драйвер.

В таблиці 1 приведені приклади графічних адаптерів та драйверів:



Таблиця 1

Драйвер

Апаратне забезпечення

CGA.BGI

Адаптери CGA, MCGA

EGAVGA.BGI

Адаптери EGA, VGA

HERC.BGI

Адаптер Hercules

ATT.BGI

AT&T 6300 (400 рядків)

PC3270.BGI

IBM 3270 PC

IBM8514.BGI

IBM 8514



В комплект поставки ТР входить обмежена кількість драйверів, який може підтримувати один, або декілька відеорежимів. Тип драйвера і режим можна задавати у вигляді числа або у вигляді символьної константи. Ці константи визначені у модулі GRAPH:



Таблиця 2

Detect = 0

{автовизначення}

CGA = 1;

EGAMONO = 5;

MCGA = 2;

IBM8514 = 6;

EGA = 3;

HercMONO = 7;

EGA64 = 4;

ATT 400 = 8;

VGA = 9;

PC3270 = 10.



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


2. Модуль GRAPH. Ініціалізація і завершення графічного режиму



Як відмічено на початку лекції, для створення графічних зображень в мові ТР призначений спеціальний стандартний бібліотечний модульGRAPH, який підключається стандартним способом: USES GRAPH;

Модуль GRAPH представляє собою окремий файл GRAPH.TPU і містить набір процедур і функцій.

Процедура ініціалізації графічного режиму:



InitGraph (var Driver, Mode : integer; path : string);



Змінні Driver i Mode задають драйвер і режим роботи адаптера, path – визначає ім’я файлу драйвера і можливий шлях до файлу.

Перші дві змінні задаються константами таблиці 2, іменем або числовим значенням.

Приклад 1:

Нехай драйвер EGAVGA.BGI знаходиться в каталозі TP\BGI диска С і встановлює режим VGAHI (640*480, 16 кольорів). Фрагмент використання процедури в програмі:



Begin

…

Driver := VGA;

Mode := VGAHI;

InitGraph (Driver, Mode, ‘C:\TP\BGI’);

…

end.




Якщо тип адаптера не відомий, або якщо програма розрахована на роботу з будь-яким адаптером, використовується звертання до процедури з параметром автоматичного визначення типу драйверу.

Приклад 1а:



Driver := Detect;

InitGraph (Driver, Mode, ‘C:\TP\BGI’);



Такий параметр рекомендують використовувати при роботі на різних комп’ютерах з різними відеоадаптерами.

Особливості автовизначення типу драйвера:

а) для адаптера вибирається максимальний режим;

б) на час виконання програми всі драйвери знаходяться у пам’яті, або на диску; для великих програм це може привести до зменшення швидкості роботи програми;

в) ТР автоматично не розпізнає адаптери IBM8514 i ATT400; їх необхідно вказувати в процедурі.

Процедура завершення графічного режиму: CLOSEGRAPH;

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

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






Program <ім’я>

Uses GRAPH

Розділи описів : var, const

…

Begin 

…

InitGraph (параметри);

…







…

CloseGraph;

…

End. 

Графічні побудови



3. Структура графічної Паскаль-програми



Приклад 2:



Program GraphicDemo;

Uses Graph;

Var Driver, Mode : integer;

Begin

Driver := Detect;

InitGraph (Driver, Mode, ‘C:\TP\BGI’);

{графічні дії}

…..

CloseGraph ;

End.


4. Помилки ініціалізації графічного режиму та їх обробка



При виконанні програми можуть виникати помилки. Тому в модулі GRAPH реалізований механізм визначення помилок та видачі повідомлень про них на екран за допомогою функції GraphResult i GraphErrorMsg.

Функція GraphResult : integer; повертає 0, якщо остання графічна операція виконалась без помилок, або число від –14..-1, при наявності помилок.

Функція GraphErrorMsg (Code : integer) : string; повертає значення типу STRING в якому відповідно коду помилки надається текстову повідомлення. CODE – код помилки, який повертається функцією GraphResult.

Приклад 3:



Var

Driver, Mode, Error : string;

Begin

Driver := Detect;

InitGraph (Driver, Mode, ‘’);

Error := GraphResult;

If Error <> 0 then

WriteLn (GraphErrorMsg (Error));

……………. {повідомлення помилки}

CloseGraph;

End.




5. Група процедур та функцій управління режимами роботи графічного адаптера



процедура DetectGraph виконується для тестування графічного адаптера:



DetectGraph (var Driver, Mode : integer);



Ця процедура може бути викликана до ініціалізації графічного режиму. Параметри:

Driver – повертає тип драйвера;

Mode - повертає максимальне значення відповідного режиму.

Ці значення і рекомендується підставляти як фактичні параметри процедури InitGraph.

		група процедур та функцій управління режимами роботи графічного адаптера:

а) функція GetGraphMode : integer повертає код установленого режиму роботи графічного адаптера.

б) функція GetMaxMod : integer; повертає максимальний номер коду режиму графічного адаптеру;

в) функція GetModName (ModNum : integer) : string; повертає значення типу STRING, яке містить ім’я режиму роботи за його номером;

г) функція GetDriveName : string; повертає ім’я поточного графічного драйвера;

д) процедура GetModeRange (Driver : integer; var LoMode, HyMode : integer); повертає діапазон можливих режимів роботи заданого графічного драйвера:

Driver – тип адаптера;

LoMode – мінімальне значення коду режиму адаптера;

HiMode - мінімальне значення коду режиму адаптера.

!Особливість!:

якщо значення Drive задано невірно, то змінні отримують значення –1;

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

процедур установки текстового та графічного режимів:

а) RestorCRTMode; повертає до текстового режиму.

!Особливість!: навідміну від CloseGraph графічний драйвер залишається у пам’яті, а також залишаються установленими графічного режиму.

б) процедура SetGraphMode (Mode : integer); установлює графічний режим за вказаним кодом – Mode.

!Осбливість!: для повернення до попереднього графічного режиму на місце параметра мінімальне значення коду режиму адаптера Mode можна вставити функцію GetGraphMode.

Розглянемо приклади використання процедур роботи з відеорежимами.

Приклад 4:

Перехід з графічного режиму до текстового і знову до графічного.



Uses Graph;

Var Driver, Mode, Error : integer;

Begin

Driver := Detect;

InitGraph (Driver, Mode, ‘’);

Error GraphResult;

If Error <> 0 then

WriteLn (GraphErrarMsg (Error))

Else

Begin

WriteLn (‘Це графічний режим’);

ReadLn;

ResultCRTMode;

WriteLn (‘Це текстовий режим’);

`ReadLn;

SetGraphMode (GetGraphMode);

WriteLn (‘Знову графічний режим’);

ReadLn;

CloseGraph;

End;

End.



Приклад 5:

Після ініціалізації графічного режиму виводить на екран рядок з іменем завантаженого драйверу, а також всі режими його роботи.



Uses GRAPH;

Var

a, b : integer;

begin

a := Detect;

InitGraph (a, b, ‘’);

WriteLn (GetDriveName);

For a := 0 to GetMaxMode do

WriteLn (GetModeName (a) : 10);

ReadLn;

CloseGraph;

End;



Приклад 6:

Вивести на екран назви всіх адаптерів і діапазон можливих номерів режимів їх роботи.



Uses Graph;

Var

D, L, H : integer;

Const

N : array [1..11] of string [8] =

(‘CGA’, ‘MCGA’, ‘EGA’;

‘EGA64’, ‘EGAMONO’, ‘IBM8514’;

‘HercMONO’, ‘ ATT400’, ‘VGA’;

‘PC3270’, ‘Помилка’);

begin

writeLn (‘ адаптер Мин. Макс.’);

for D :=1 to 11 do

begin

GetModeRange (D, L, H);

WriteLn (N [D], L : 7, H : 10);

End;

End.



Таким чином:

а) керування графічним режимом забезпечується модуль GRAPH, який підключається стандартним способом: USES GRAPH;

б) для ініціалізації графічного режиму використовують процедура InitGraph;

в) завершує графічний режим процедура CloseGraph;

г) структура графічної Паскаль-програми практично не відрізняється від стандартної структури;

д) модуль GRAPH містить широкий набір процедур та функцій роботи з відеорежимами.



6. Побудови графічних об’єктів



Побудова геометричних фігур

Для побудови зображення у графічному режимі використовують систему координат, яка відрізняється від текстового режиму (екран представляється у вигляді прямокутного масиву символів і координати Х, У починаються з 1 …max значення).

Відлік координат починається з верхнього лівого кута екрана з координатами (0, 0). При цьому екран представляється у вигляді прямокутного масиву адресуємих точок (пікселів). Для різних типів адаптерів та режимів кількість точок по вертикалі та горизонталі суттєво відрізняється.

Для визначення максимальних значень координат екрану, в модулі GRAPH використовують функції:



GetMax X : integer;

GetMax Y : integer.



Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується.

Побудова графічного зображення починається з позначення початкової позиції. У текстовому режимі цю позицію позначає курсор, який розміщується за останнім символом і вказує на місце наступного символу. В графічних режимах відображаємого на екрані курсору не має, але є скритий поточний показчик СР (current pointer), який виконує аналогічні функції курсору текстового режиму.

В графічному режимі для переміщення СР використовують процедури:

Move To (x, y : integer) – переміщує поточний показчик СР в точку з координатами x, y;

Move Rel (dx, dy : integer) – переміщує СР на dx точок по горизонталі і на dy точок по вертикалі відносно останнього положення поточного показчика. Якщо dx, dy більше 0, то координати СР збільшуються; якщо менше 0 - зменшуються.

Для визначення поточного розташування графічного курсору СР використовують функції:



GET X : integer;

GET Y : integer;



які повертають значення поточних координат показчика.

Приклад 1: позиціонування графічного курсору та визначення його координат:



Uses GRAPH;

Var Driver, Mode : integer;

Begin

Driver := Detect;

InitGraph (Drive, Mode, ‘’);

If GraphResult <> 0 then

Begin

WriteLn (‘ошибка’);

Halt (1);

End;

Move To (GetMax X div 2, GetMax Y div);

OutTextXY (GET X, GET Y, ‘курсор по центру’);

MoveRel (-GET X div 2, -GET Y div 2);

OutTextXY (‘курсор переміщений’);

ReadLn;

CloseGraph;

End.



Установка кольору та стилю

1) процедура Set Color (Color : word); встановлює поточний колір для ліній та символів. Параметр Color позначає номер кольору від 0 до 15:



Таблиця 1

Black = 0

Light Gray = 7

Blue = 1

Darc Gray = 8

Green 2

 Light Blue = 9

Cyan =3

Light Green = 10

Red = 4

Light Cyan = 11

Magente = 5

Light Red = 12

Brown = 6

Light Magente = 13

Yellow = 14

White = 15

Blink = 128



2)процедура SetBKColor (Color : word); встановлює колір фону, який визначається параметром Color.

процедура SetFillStyle (Fill, Color : word); встановлює стиль (тип і колір) заповнення фрагментів зображення.

Геометричні побудови.

Відображення точки:

В модулі Graph для відображення точки використовують процедуру:



PutPixel (x, y : integer);



x, y – координата точки;

Color – її колір (значення беруть зі встановленої палітри).

Відображення ліній:

а) Процедура:



Line (x1, y1, x2, y2 : integer);



x1, y1, x2, y2 - координати початкової і кінцевої точок лінії. Лінія креслиться поточним стилем і поточним кольором.

б) процедура: LineTo (x, y : integer); будує лінію від точки поточного розміщення показчика до точки зкоординатами (x,y).

в) процедура: LineRel (dx, dy : integer); проводить відрізок від точки поточного розміщення на величину заданого приросту.

г) процедура:SetLineStyle (Type, Pattern, Thich : word); встановлює стиль відображення ліній, де параметри – це відповідно тип, шаблон і товщина лінії. Тип лінії задається константою з таблиці 3:



Таблиця 3

Const

Значення

Характеристика

SolidLn

0

Безперервна

PottedLn

1

Пунктирна

CenterLn

2

Штрих-пунктирна

DashedLn

3

Штрихова

UserBitLn

4

Задана



Параметр Pattern тільки для ліній типу UserBitLn і може приймати значення від 1..65536, тобто 2 байта кожен біт (із 16 біт слова) може приймати значення 0 або 1 (піксель не світиться або світиться).

Таким чином параметр Pattern задає відрізок ліній, довжиною 16 пікселів.

Цей шаблон періодично повторюється по всій довжині ліній.

Параметр Thich приймає 2 значення:




Norm Width = 1

Thick WidTh = 3



Побудова прямокутників та паралелепіпедів

Процедура Rectangle (x1, y1, x2, y2 : integer); створює прямокутник з координатами x1, y1 – лівого верхнього кута і x2, y2 – правого нижнього кута. Область середини прямокутника незафарбована і співпадає з кольором фону екрану. Для ліній прямокутника використовується поточний стиль ліній і колір (заданий).

Процедура Bar (x1, y1, x2, y2 : integer); утворює прямокутник, внутрішня область якого заповнюється поточним стилем (тип і колір). Параметри процедури – відповідні координати лівого верхнього та правого нижнього кутів. Використовують для побудови гістограм, діаграм і т.п.

Процедура Bar3D (x1, y1, x2, y2 : integer; D3 : word; Top : boolean); відображає паралелепіпед (трьохмірне зображення) і зафарбовує його передню грань поточним стилем. X1..Y2 – координати лівого верхнього та правого нижнього кута передньої грані; D3 – трьохмірне зображення "глибина" у пікселях; Top – задає режим відображення верхньої грані. В модулі GRAPH для режиму Top визначені 2 константи:



Top On = TRUE – верхня грань відображається;

Top Off = FALSE – верхня грань не відображається.



Будова многокутників.

Многокутники можна зображати декількома способами: наприклад, за допомогою процедур Line, LineTo.

Паскаль також містить процедури, які дозволяють будь-які многокутники.

процедура DrowPoly (n : word; var points); створює многокутник за допомогою ліній поточного кольору, стиля і товщини. Параметр n – кількість точок ламаної; points – змінна типу PointType, яка містить координати x, y точок ламаної.

В модуліGRAPH передбачений такий тип:



Type

PoinType = RECORD

x, y : integer;

end;



процедура FillPoly (n : word; var points); схожа з попередньою, але навідміну від неї – малює замкнутий многокутник і зафарбовує його. Стиль і колір лінії і контура задається процедурами SetLineStyle i SetColor, тип і колір заповнення – процедурою SetFillStyle.

Процедура FloodFill (x, y : integer; Border : word); служить для заповнення заданим стилем (SetFillStyle) області в середині або зовні замкненого контуру. Параметри: x, y – координати точки в середині або зовні контура; Border – задає колір контуру. Якщо контур незамкнений то буде заповнення всього екрану заданим стилем.

Побудова кола, дуги та еліпсу.

процедура Circle (x, y : integer; r : word); зображає коло поточного кольору, товщини і вид лінії. Параметри x, y – координати центру кола, r – радіус у пікселях.

Процедура Arc (x, y : integer; StAngle, EndAngle, r : word); креслить дугу кола. Задається координатами центру кола, початковим та кінцевим кутами ( у градусах), які відраховуються від горизонтальної вісі проти часової стрілки; радіус кола у пікселях.

процедура Ellipse (x, y : integer; StAngle, EndAngle, xr, yr, r : word); призначена для побудови еліптичних дуг. Параметри: координати центру, початковий та кінцевий кути, горизонтальний та вертикальний радіуси еліпсу у пікселях.

Процедура Sector (x, y : integer; StAngle, EndAngle, rx, ry, r : word); відображає сектор еліпсу, який заповнюється поточним стилем. Параметри аналогічні.

Процедура FillEllipse (x, y : integer; xr, yr : word); креслить контур еліпсу поточним кольором і заповнює поточним стилем. Параметри: координати центру, горизонтальний та вертикальний радіуси еліпсу.

Процедура PieSlice (x, y : integer; StAngle, EndAngle, r : word); зображає сектор кола і заповнює поточним стилем. Зручно використовувати для побудови кругових діаграм.

Програмування графіки в комбінації з текстом

Відображення тексту у графічному режимі має ряд особливостей:

всі дії виконуються тільки з рядковими константами і змінними, тому вся чисельна інформація повинна перетворюватись в символьну;

можливість використання різноманітних шрифтів.

Розглянемо основні засоби модуля GRAPH для виведення текстової інформації:

а) процедура OutText (text : string); виводить на екран рядок тексту, починаючи з поточного розміщення графічного курсору СР;

б) процедура OutTextXY ( x, y, text ); виводить рядок тексту починаючи з указаних координат;

в) процедура SetTextStyle (Font, Direct, size : word); встановлює стиль тексту. Параметри: код шрифту, код орієнтації символів, розмір символів.

Відображення цифрової інформації.

В модулі GRAPH засоби відсутні. Але можна використовувати наступний спосіб: спочатку перетворити число або цифру в рядок за допомогою процедури Str, а далі операцією конкатенації (+) поєднати її з рядком, який відображається процедурою OutTextXY.

Приклад:



Max := 3.14;

Str (Max : 4 : 2, Smax);

OutTextXY (400, 40, ‘Max=’ + Smax);



Висновки: таким чином модуль GRAPH містить достатньо потужні засоби побудови і відображення різноманітної графічної інформації (геометричні фігури в комбінації з текстом і числами).