Відображення на екрані дисплея графічної інформац
Відображення на екрані дисплея графічної інформац
Житомирський Військовий Інститут Національного Авіаційного Уніврситету Реферат на тему:Відображення на екрані дисплея графічної інформаціїЖитомир 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; Процедура без параметрів. В процесі її виконання звільняється пам'ять (від драйверів, файлів, шрифтів, проміжних даних), відновлюється текстовий режим роботи екрану. Наступний перехід до графічного режиму виконується тільки шляхом повторної ініціалізації. 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 містить достатньо потужні засоби побудови і відображення різноманітної графічної інформації (геометричні фігури в комбінації з текстом і числами).
|