Керування кольором і стилями

Програмування графіки

 

Відеоадаптер персонального комп’ютера може працювати в одному із двох режимів: текстовому або графічному. У текстовому режимі на екрані дисплея відобра­жаються лише символи. У графічному режимі мінімальним елементом зображення на екрані дисплея є піксель, або графічна тачка.

Будь яка програма, що працює у графічному режимі, використовує графічні драйвери – файли, що містять інформацію про властивості відеоадаптерів. У середовищі 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;