Структура управления организацией, ориентированная на решение стратегических проблем (Доклад)
Житомирський
Військовий Інститут
Національного
Авіаційного Уніврситету
Реферат на тему:
Відображення
на екрані дисплея графічної інформації
Житомир
2010
План
1.
Графічний режим роботи дисплейних адаптерів. Типи
драйверів
2.
Модуль GRAPH. Ініціалізація і завершення графічного режиму
3.
Структура графічної Паскаль-програми
4.
Помилки ініціалізації графічного режиму та їх
обробка
5.
Процедури та функції роботи з відеорежимами
6.
Побудови графічних об’єктів
1. Графічні режими роботи дисплейних адаптерів. Типи драйверів
Починаючи з версії 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 і містить
набір процедур і функцій.
1)
Процедура ініціалізації графічного режиму:
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; їх необхідно вказувати в
процедурі.
2) Процедура завершення графічного режиму: 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. Група процедур та функцій управління режимами роботи графічного
адаптера
1)
процедура DetectGraph виконується для тестування графічного адаптера:
DetectGraph (var Driver, Mode : integer);
Ця процедура може бути викликана до ініціалізації графічного режиму.
Параметри:
Driver –
повертає тип драйвера;
Mode -
повертає максимальне значення відповідного режиму.
Ці значення і рекомендується підставляти як фактичні параметри
процедури InitGraph.
2)
група процедур та функцій управління режимами
роботи графічного адаптера:
а) функція GetGraphMode : integer повертає код установленого режиму
роботи графічного адаптера.
б) функція GetMaxMod : integer; повертає максимальний номер
коду режиму графічного адаптеру;
в) функція GetModName (ModNum : integer) : string; повертає значення типу STRING, яке містить ім’я режиму роботи за його номером;
г) функція GetDriveName
: string; повертає ім’я поточного графічного драйвера;
д) процедура GetModeRange (Driver : integer; var LoMode, HyMode : integer); повертає діапазон можливих режимів роботи
заданого графічного драйвера:
Driver – тип адаптера;
LoMode – мінімальне значення коду режиму
адаптера;
HiMode - мінімальне значення коду режиму
адаптера.
!Особливість!:
-
якщо значення Drive задано невірно, то змінні отримують значення –1;
-
перед звертанням до процедури можна не
встановлювати графічний режим.
3)
процедур установки текстового та графічного
режимів:
а) 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), який виконує аналогічні функції курсору текстового режиму.
В графічному режимі для переміщення СР використовують процедури:
2)
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.
3)
процедура SetFillStyle (Fill, Color : word); встановлює стиль
(тип і колір) заповнення фрагментів зображення.
Геометричні побудови.
1)
Відображення точки:
В модулі Graph для
відображення точки використовують процедуру:
PutPixel (x, y : integer);
x, y – координата точки;
Color – її колір (значення беруть зі встановленої
палітри).
2)
Відображення ліній:
а) Процедура:
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
Побудова прямокутників
та паралелепіпедів
1)Процедура Rectangle (x1, y1, x2, y2 : integer); створює прямокутник з
координатами x1, y1 – лівого верхнього кута і x2, y2 – правого нижнього кута. Область середини
прямокутника незафарбована і співпадає з кольором фону екрану. Для ліній
прямокутника використовується поточний стиль ліній і колір (заданий).
2)Процедура Bar (x1, y1, x2, y2 : integer); утворює прямокутник,
внутрішня область якого заповнюється поточним стилем (тип і колір). Параметри
процедури – відповідні координати лівого верхнього та правого нижнього кутів.
Використовують для побудови гістограм, діаграм і т.п.
3)Процедура 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.
Паскаль також містить процедури, які дозволяють будь-які многокутники.
1)
процедура DrowPoly (n : word; var points); створює многокутник за допомогою ліній поточного кольору, стиля і
товщини. Параметр n –
кількість точок ламаної; points – змінна типу PointType, яка містить координати x,
y точок
ламаної.
В модуліGRAPH
передбачений такий тип:
Type
PoinType = RECORD
x, y : integer;
end;
2)
процедура FillPoly (n :
word; var points); схожа з попередньою, але навідміну
від неї – малює замкнутий многокутник і зафарбовує його. Стиль і колір лінії і
контура задається процедурами SetLineStyle i SetColor, тип і колір заповнення –
процедурою SetFillStyle.
3)
Процедура FloodFill (x, y : integer; Border : word); служить для
заповнення заданим стилем (SetFillStyle) області в середині або зовні замкненого контуру. Параметри: x, y – координати точки
в середині або зовні контура; Border – задає колір контуру. Якщо контур незамкнений то буде заповнення
всього екрану заданим стилем.
Побудова кола, дуги та еліпсу.
1)
процедура Circle (x, y : integer; r : word); зображає коло
поточного кольору, товщини і вид лінії. Параметри x,
y – координати центру кола, r – радіус у пікселях.
2)
Процедура Arc (x, y :
integer; StAngle, EndAngle, r : word); креслить дугу
кола. Задається координатами центру кола, початковим та кінцевим кутами ( у
градусах), які відраховуються від горизонтальної вісі проти часової стрілки;
радіус кола у пікселях.
3)
процедура Ellipse (x, y : integer; StAngle, EndAngle, xr, yr, r : word); призначена для побудови еліптичних дуг.
Параметри: координати центру, початковий та кінцевий кути, горизонтальний та
вертикальний радіуси еліпсу у пікселях.
4)
Процедура Sector (x, y : integer; StAngle, EndAngle, rx, ry, r : word); відображає сектор еліпсу, який заповнюється
поточним стилем. Параметри аналогічні.
5)
Процедура FillEllipse (x, y : integer; xr, yr : word); креслить контур еліпсу поточним кольором і
заповнює поточним стилем. Параметри: координати центру, горизонтальний та
вертикальний радіуси еліпсу.
6)
Процедура PieSlice (x, y : integer; StAngle, EndAngle, r : word); зображає сектор кола і заповнює поточним стилем. Зручно використовувати
для побудови кругових діаграм.
Програмування графіки в комбінації з текстом
Відображення тексту у графічному режимі має ряд особливостей:
1)
всі дії виконуються тільки з рядковими константами
і змінними, тому вся чисельна інформація повинна перетворюватись в символьну;
2)
можливість використання різноманітних шрифтів.
Розглянемо основні засоби модуля GRAPH для виведення текстової інформації:
а) процедура OutText (text : string); виводить на екран рядок тексту, починаючи з поточного розміщення
графічного курсору СР;
б) процедура OutTextXY ( x, y, text ); виводить рядок тексту
починаючи з указаних координат;
в) процедура SetTextStyle (Font, Direct, size : word); встановлює стиль тексту. Параметри: код шрифту, код орієнтації
символів, розмір символів.
1.
Відображення цифрової інформації.
В модулі GRAPH
засоби відсутні. Але можна використовувати наступний спосіб: спочатку
перетворити число або цифру в рядок за допомогою процедури Str, а далі операцією конкатенації (+)
поєднати її з рядком, який відображається процедурою OutTextXY.
Приклад:
Max := 3.14;
Str (Max : 4 : 2, Smax);
OutTextXY (400, 40, ‘Max=’ + Smax);
Висновки: таким чином модуль GRAPH містить
достатньо потужні засоби побудови і відображення різноманітної графічної
інформації (геометричні фігури в комбінації з текстом і числами).