Основні процедури та функції для роботи з графікою умовно можна поділяти на наступні групи
1. Службові – вмикання, вимикання графічного режиму, зміна відео режиму, очистка екрану
2. Керування кольором – зміна кольорів палітри, встановлення поточного кольору, стиля заливки
3. Виведення примитівів – точек, ліній, окружностей, багатокутників, заповнення областей екрану
Всі процедури і функції розташовані в модулі Graph, який входить до стандартної поставки середи програмування Pascal
Розглянемо ці типи процедур та функції послідовно.
1) . Службові процедури та функції
Графічний режим У цьому режимі зображення формується з ряду світних крапок - пікселів. Кожний піксель задається парою координат - х та у. Для різних графічних режимів координатні сітки можуть бути різними. Колірне значення кожного пікселя зберігається у вигляді бітів у відеобуфері й переноситься на екран.
Робота із графікою в Турбо-Паскале. Після включення комп'ютера відео термінал перебуває в текстовому режимі. Для переходу в графічний режим у своїй програмі необхідно реалізувати виклик графічного драйвера.
Для цього використається процедура InitGraf (Driver, Mode, ‘C:\TP7\BGI’), де
· Driver -тип драйвера (константи, найпоширеніша 9 - VGA );
· Mode -режим роботи відеоадаптера. Кожний драйвер забезпечує кілька режимів роботи.
· ‘C:\TP7\BGI’ -адреса директорії (шлях), у якій перебуває шукана програма - драйвер. У нашому випадку це шлях до драйвера EGAVGA.BGI.
Якщо тип використовуваного в комп'ютері адаптера невідомий, можна розпізнати його автоматично:
DetectGraph (Driver, Mode);
InitGraf (Driver, Mode, 'C:\TP7\BGI')
Функція GraphResult повертає код результату виконання останньої графічної підпрограми. Якщо помилки не відбулося, то код буде дорівнює 0. Інакше функція поверне негативне число від -1 до -14, що вказує на код помилки. Після виклику GraphResultавтоматично скидається в нуль.
Після того як адаптер переведений у графічний режим роботи, можна використати набір графічних підпрограм, що входять до складу модуля Graph(graph.tpu ).
Після закінчення роботи в графічному режимі необхідно перевести адаптер у текстовий режим за допомогою процедури CloseGraph.
Зауваження: у графічному режимі курсор на екрані не высвечивается.
2) Керування кольором
Встановлення поточного кольору або фону здійснюється процедурами
SetColor (Color:Word) та SetBkColor (Color:Word) відповідно. Color кольорова константа змінюється від 0..15.
Зміна стилю лінії (сполошна, пунктирна, штрихова і т.і) здійснюється процедурою
SetLineStyle (LineStyle, Pattern, Thickness: Word).
Константи LineStyle задає визначені заздалагеть стилі лінії SolidLn (0) – сплошна, DottedLn (1) – з точек, CenterLn (2) – штрих-пунктирна, DashedLn (3) – штрихова, UserBitLn (4) – визначена користувачем. В цьому випадку други параметр визначає взаємне положення заповнених та пустих ділянок на протязі лінії. Константа Pattern уявляє собою послідовність біт з 0 та 1. Нули відображають пусте місце 1 – заповнені участки. Параметр Thickness задає товщину лінії. Значення 1 – тонка лінія, значення 3 – товста.
Зміна стилю заповнення області (сполошне, штрихове) здійснюється процедурою
SetFillStyle(Pattern: Word; Color: Word). Параметр Color задає кольор, параметр Pattern номер шаблона заповнення. Значення параметру приведені в таблице. Дана процедура здійснюється разом з процедурою заповнення області FloodFill(X,Y:Integer; Border:Word).
3. Виведення примитівів
В мові Pascal визначені процедури для малювання основних графічних примитівів. В таблиці надані основні процедури з описом параметрів.
Процедури виведення графічних примитівів.
Примітів
| Процедура
| Опис
|
Точка
| PutPixel(X,Y:Integer; Col:Word);
| Установка пикселя кольором Col в позиції (X,Y)
|
Пряма
| Line (X1,Y1,X2,Y2:Integer)
| Пряма из позиции (X1, Y1) в позицию (X2, Y2)
|
LineTo(X,Y:Integer)
| Прямая з поточної позиції в позицию (X,Y)
|
LineRel(dX,dY:Integer)
| Прямая поточної позиції в позицию, задаваєму зміщенням відносно поточної
|
Поточна позіція
| MoveTo(X,Y:Integer)
MoveRel(dX,dY:Integer)
| Абсолютне або відносне зміщення
|
Прямокутник
| Rectangle(x1, y1, x2, y2: Integer)
| (X1,Y1) и (X2,Y2) – противоположні вершини .
Bar – заповнений прямокутник
|
Bar(x1, y1, x2, y2: Integer)
|
Окружность
| Circle(X,Y: Integer; Radius: Word)
| Окружность з центром в (X,Y) та радіусом Radius
|
Дуга
| Arc (X,Y: Integer; StAngle, EndAngle, Radius: Word)
| Центр (X,Y), радіус Radius;
дуга від кута StAngle до EndAngle (у градусах)
|
Сектор
| PieSlice(X, Y: Integer; StAngle, EndAngle, Radius: Word)
| Сектор окружності, задається як і дуга (Arc)
|
Еліпс
| Ellipse(X, Y: Integer; StAngle, EndAngle: Word;
XRadius, YRadius:Word);
| XRadius и YRadius – розміри півосей; інші параметри як і у Arc.
|
FillEllipse(X, Y: Integer; XRadius, YRadius: Word)
|
Полігон
| DrawPoly(Num: Word;
var PP)
| Num – кількість точек;
PP – масив з PointType.
FillPoly – заповнений полігон.
|
FillPoly(Num: Word;
var PP)
|
Текст
| OutText(TextString: string)
OutTextXY(X,Y: Integer; TextString: string)
| X,Y – точка виведення ;
TextString –текст
|
Підпрограми роботи з відеопам'яттю Для створення зображень, що рухаються, необхідно користуватися наступними функціями:
1 ImageSize(X1,Y1,X2,Y2); - одержання числа байтів, необхідних для розміщення в пам'яті прямокутної ділянки екрана.
2 Get Mem (V^,size) – віділення ділянки памяті розміром size в «кучі»
3 GetImage(X1,Y1,X2,Y2,V^); - запам'ятовування зображення ділянки екрана з крайніми координатами (X1,Y1) та (X2,Y2)в буфері (у змінної V).
4. PutImage (X,Y,V^,C);- виведення зображення з буфера на екран. Параметри X та Y задают точку виведення, V^ - те що виводиться, С – яким чином виводиться може набувати значень - NormalPut, CopyPut (0) –звичайне виведення, XORPut (1) – інверсія , OrPut (2) – наложення, AndPut (3) – перетін, NotPut (4) – інверсія.