Управління кольором free pascal

колірну палітру. Програма має можливість опитати або змінити вміст будь-якого регістра палітри або вміст всіх регістрів одночасно.

SetBkColor (n_reg); // n_reg з діапазону [0, 255]

Колір малювання, яким відтворюються відрізки прямих і контури различ- них графічних фігур (примітивів - дуг, кіл, еліпсів, многоуголь- ників та ін.), Встановлюється за допомогою процедури SetColor. Її єдиним аргументом є номер регістра ЦАП, в якому зафіксовано фізичний колір переднього плану:

SetColor (n_reg); // n_reg з діапазону [0, 255]

Колір і спосіб заливки встановлюється за допомогою процедури SetFillStyle: SetFillStyle (Pattern, n_reg); // n_reg з діапазону [0, 255]

Параметр Pattern (шаблон) визначає спосіб заповнення замкнутої фігури (заливка суцільним кольором, всілякі штрихування, растрова зафарбування і т. П.). З усіма способами, підтримуваними бібліотекою BGI, ми познайомимося позд- неї.

Для знайомства з палітрою за замовчуванням, яка встановлюється при іні соціалізації графічної системи, можна скористатися програмою з лістін- га 15.1.

Лістинг 15.1. програма color256

program color256; uses graph;

gd, gm: SmallInt; x, y, i, j: SmallInt;

gd: = D8bit; gm: = m800x600; initgraph (gd, gm, "); for i: = 0 to 15 do

for j: = 0 to 15 do begin

y: = j * 20; SetfillStyle (SolidFill, i * 16 + j); Bar (x, y, x + 40, y + 20);

Ця програма послідовно відтворює прямокутники розміром

40 20 пікселів, розфарбовуючи їх в колір, відповідний вмісту чергового регістру ЦАП. Результат її роботи представлений на рис. 15.2. Нумерація колірних відтінків просувається від 0 до 255. У кожному стовпці представлені кольору 16 по Отже регістрів ЦАП.

Управління кольором free pascal

Мал. 15.2. Колірна палітра за замовчуванням

У регістрі ЦАП з нульовим номером знаходиться нульовий код, відповідний трійці мінімальних інтенсивностей RGB-компонентів - (0, 0, 0). На екрані цього набору відповідає чорний колір. У регістрі з номером 1 знаходиться трійка (0, 0, 63), відповідна максимальної інтенсивності синього кольору. Регістр з номером 2 містить трійку (0, 63, 0), і його вміст відтворюється зеленим кольором. У наступному регістрі "змішані" максимальні значення синього і зеле- ного квітів - (0, 63, 63), відповідні бірюзового кольору. Вміст чет- верти регістра одно (63, 0, 0) і відображається червоним кольором, і т. Д. Для про- значення перших 16 колірних відтінків можна використовувати імена мнемонічних констант, наведені в табл. 15.4.

Підбір інших кольорів з палітри за замовчуванням зазвичай виконується експе- риментально шляхом або за допомогою кольорової гами, представленої на рис. 15.2.

Функції GetColor і GetBkColor в аргументах не потребують. Вони повертають значення типу Word, що відповідають номерам регістрів ЦАП, приписаних в даний момент часу до квітів малювання і фону:

Для установки або опитування вмісту регістрів палітри доводиться викорис заклику спеціальні структури - записи типу RGBRec і PaletteType:

RGBRec = packed record Red. SmallInt; Green. SmallInt; Blue. SmallInt;

PaletteType = record Size. LongInt;

Colors. array [0..MaxColors] of RGBRec; end;

Запис типу RGBRec є три двобайтових поля, призначений- них для зберігання вмісту одного регістра ЦАП. Запис типу PaletteType дозволяє зберігати вміст всіх регістрів палітри. Її перше поле зберігає розмір палітри в байтах. Слідом за ним розташовується масив, в якому размеща- ється вміст всіх регістрів палітри. Для режиму D8bit значення MaxColors (максимальний номер доступного кольору) дорівнює 255.

DACreg: RGBRec; DACall: PaletteType; max_reg: SmallInt;

max_reg: = GetPaletteSize; // опитування макс. номера регістра палітри GetPalette (DACall); // опитування всіх регістрів поточної палітри GetDefdaultPalette (DACall); // опитування палітри за замовчуванням SetAllPalette (DACAll); // установка всіх регістрів палітри SetPalette (n_reg, DACreg); // дає змогу змінювати регістр з номером n_reg SetRGBPalette (n_reg, vR, vG, vB); // дає змогу змінювати регістр з номером n_reg

У процедурі SetRGBPalette значення RGB-компонентів повинні належати інтервалу [0, 63].

Взагалі кажучи, особливо мудрувати зі зміною палітри не варто - 256 кольорів палітри за замовчуванням цілком достатньо для не дуже мудрованої BGI-графіки.