Керування кольором і стилями
Програмування графіки
Відеоадаптер персонального комп’ютера може працювати в одному із двох режимів: текстовому або графічному. У текстовому режимі на екрані дисплея відображаються лише символи. У графічному режимі мінімальним елементом зображення на екрані дисплея є піксель, або графічна тачка.
Будь яка програма, що працює у графічному режимі, використовує графічні драйвери – файли, що містять інформацію про властивості відеоадаптерів. У середовищі Borland Pascal 7.0 графічні драйвери зберігаються у файлах, які мають розширення bgi (від Borland Graphics Interface)
Крім графічних драйверів, під час роботи з графікою в середовищі Borland Pascal 7.0 використовується стандартний бібліотечний модуль Graph, Він є бібліотекою підпрограм, що містить біля 80 графічних процедур і функцій, а також десятки стандартних констант і оголошень типів даних. Модуль Graph підключається до програми за допомогою розділу uses:
uses Graph;
Модуль Graph міститься у файлі …\units\graph.tpu , і щоб забезпечити можливість роботи із графікою, цей файл потрібно зробити досяжним для компілятора. Для цього шлях до файлу модуля Graph слід записати в полі Unit Directories вікна, яке відкривається з меню Options Directories.
Перед тим як виводити певні зображення слід ініціалізувати графічний режим, це відбувається за допомогою процедури, яка завантажує до оперативної пам’яті графічний драйвер і переводить адаптер у графічний режим роботи:
InitGraph (GraphDriver: integer; var GraphMode: integer; PathToDriver: string);
Параметри процедури мають наступний зміст:
GraphDriver – тип графічного драйвера;
GraphMode – графічний режим роботи адаптера;
PathToDriver – шлях до каталогу, де зберігаються файли *.bgi – якщо останнє не задане пошук значення параметра здійснюється у робочому каталозі програми.
Вікно графічного режиму та система координат
Для виведення графічного зображення використовується координатний метод. Згідно з цим методом кожна точка на екрані задається двома прямокутними координатами. У режимі VGA лівий верхній кут екрана має координати (0,0), правий нижній – (639,479), Функції GetMaxX та GetMaxY повертають максимальні значення координат по горизонталі (X) та по вертикалі (Y) в поточному режимі роботи адаптера. Координати піксела «о горизонталі та вертикалі визначаються функціями GetX та GetY.
Система, координат відеоадаптера має певні відмінності від декартової системи. По-перше, як уже зазначалося, вертикальні координати точок адаптера збільшуються зверху вниз. По-друге, координати пікселів можуть бути лише цілочисловими. По-третє, зображення на екрані може розтягуватися. Якщо на екрані зобразити коло, в деяких відео-режимах воно виглядатиме як еліпс.
У загальному випадку формули перетворення декартових координат (dX, dY) в екранні (Х, У) враховують масштаб зображення, а також його горизонтальний і вертикальний зсув відносно початку координат:
mX = wX div wdX; X = ціла частина від (dX * mX) + X;
mY = hY div hdY; Y = ціла частина від (dY * mY) + Y;
де mX, mY – масштаб по горизонталі і вертикалі; wX, hY – ширина і висота області зображення в екранних координатах; wdX, hdY – ширина і висота області зображення в декартових координатах; X, Y – зсув початку координат.
Для обмеження області виведення зображення можна створити прямокутне графічне вікно:
SetViewPort (x1,y1,x2,y2: integer; Clip: boolean)
Параметри х1, у1, х2, у2 – координати лівого верхнього та правого нижнього кутів графічного вікна. Для відсікання зображення за межами графічного вікна параметру Clip надається значення clipon, а для його продовження – значення clipoff.
Очищення графічного вікна здійснює процедура ClearViewPort, а очищення всього екрана та заповнення його кольором фону – процедура ClearDevice.
Керування кольором і стилями
Для зображення графічних об'єктів використовується кольорова палітра з кодами кольорів 0, 1, …, maxcolors. Взагалі драйвер VGA дозволяє відображати до 218 кольорових відтінків, але одночасно – не більше 16. Тому значення константи maxcolors дорівнює 15 і за замовчуванням використовуються 16 кольорів:
Const
Black = 0; {чорний}
Blue = 1; {темно-синій}
Green = 2; {темно-зелений}
Cyan = 3; {темно-блакитний}
Red = 4; {бордовий}
Magenta = 5; {темно-фіолетовий}
Brown = 6; {рудий}
Lightgray = 7; {сірий}
Darkgray = 8; {темно-сірий}
LightBlue = 9; {синій}
Lightgreen = 10; {зелений}
Lightcyan = 11; {блакитний}
Lightred = 12; {червоний}
Lightmagenta = 13; {фіолетовий}
Yellow = 14; {жовтий}
White = 15; {білий}
Використання інших відтінків вимагає доволі складної техніки керування кольоровими палітрами. Синтаксис процедур і функцій, що встановлюють кольори ліній і фону, наведено в табл. 5. Установка кольору впливає на всі подальші виклики процедур зображення геометричних об'єктів. За замовчуванням вибирається чорний фон і білий колір ліній.
Для зафарбування геометричної фігури використовуються процедури заповнення замкнутого контуру заданим кольором у певному стилі (див. табл. 5). Наведемо приклади оголошення констант, що визначають стиль заповнення, а також стиль і товщину ліній:
Const
{стиль заповнення}
EmptyFill = 0; SolidFill = 1; LineFill = 2; LtSlashFill = 3; SlashFill = 4; BkSlashFill = 5; LtBkSlashFill = 6;
HatchFill = 7; XHatchFill = 8; InterleaveFill = 9; WideDotFill = 10; CloseDotFill = 11; UserFill = 12;
{стиль ліній}
SolidLn = 0; DottedLn = 1; CenterLn = 2;
DashedLn = 3; UserBitLn = 4;
{товщина ліній}
NormWidth = 1; ThickWidth = 3;