3.8. Понятие палитры
Адаптер EGA и все совместимые с ним адаптеры предоставляют дополнительные возможности по управлению цветом. Наиболее распространенной схемой представления цветов для видеоустройств является так называемое RGB-представление, в котором любой цвет задается как сумма трех основных цветов -красного (Red), зеленого (Green) и синего (Blue) с заданными интенсивностями. Все пространство цветов представляется в виде единичного куба, и каждый цвет определяется тройкой чисел (г, g, b). Например, желтый цвет задается как (1, 1, 0), а малиновый - как (1, 0, 1). Белому цвету соответствует набор (1,1,1), а черному - (0,0,0).
Обычно под хранение каждой из компонент цвета отводится фиксированное количество п бит памяти. Поэтому допустимый диапазон значений для компонент цвета [0,2n-1], а не [0, 1].
Практически любой видеоадаптер способен отобразить значительно большее количество цветов, чем определяется количеством бит, отводимых в видеопамяти под 1 пиксел'. Для использования этой возможности вводится понятие палитры.
Палитра - это массив, в котором каждому возможному значению пиксела ставится в соответствии значение цвета (г, g, b), выводимое на экран. Размер палитры и ее организация зависят от типа используемого видеоадаптера.
Наиболее простой является организация палитры на EGA-адаптере. Под каждый из 16 возможных логических цветов (значений пиксела) отводится 6 бит, по 2 бита на каждую цветовую компоненту. При этом цвет в палитре задается байтом вида
OOrgbRGB,
где r> g> b, R, G, В могут принимать значения 0 или 1. Используя функцию setpalette void far setpalette (int color, int colorValue ); можно для любого из 16 логических цветов задать любой из 64 возможных физических цветов.
Компьютерная графика. Полигональные модели Функция getpalette
void far getpalette ( struct palettetype far * palette );
служит для получения текущей палитры, которая возвращается в виде следующей структуры:
struct palettetype
{
unsigned char size;
signed char colors [MAXCOLORS+1];
};
Приведенная ниже программа демонстрирует использование палитры для получения четырех оттенков красного цвета.