Максимальный номер цвета, воспринимаемый данным адаптером в текущем графическом режиме, может быть получен при помощи функции
GetMaxColor : Word
Например, для CGA в режиме 320x200 (4 цвета на экране) эта функция возвращает число 3, а для CGA в режиме 640x200 (только два цвета) — 1. Эту информацию можно использовать для переопределения цветов:
TYPE
ColorSetType = Array [0..15] of Byte; { тип набор }
VAR
CS : ColorSetType; { набор цветов }
i, GMC : Word;
BEGIN
...
GMC := Succ( GetMaxColor );
for i:=0 to 15 do CS[ i ] := i mod GMC;
...
end.
После такого заполнения матрицы-набора цветов можно обращаться к любому цвету из диапазона 0..15, например CS [White] (это то же, что и CS[15]), даже в режиме Hercules — значение элементов массива никогда не превзойдет GetMaxColor.
На экране всегда различаются цвет фона и цвет пера. Все процедуры изображения фигур, если не содержат в себе явной установки цвета, рисуют эти фигуры цветом пера (как символы в текстовом режиме). Этот цвет устанавливается процедурой
SetColor( Color : Word )
Цвет фона — всегда един в поле экрана. Он может быть изменен процедурой
SetBkColor( Color : Word )
После использования этой процедуры цвет экрана сразу же меняется на заданный. Параметр Color не должен превышать текущее значение GetMaxColor. Цветом фона может быть любой из разрешенных цветов, в том числе и яркий. По умолчанию и при реинициализации графики цвет фона равен 0 (Black), а цвет пера равен значению функции GetMaxColor.
- 443 -
Всегда можно опросить текущие установки цвета. Функция
GetColor : Word
возвращает значение текущего цвета пера, а функция
GetBkColor : Word
возвращает текущий цвет фона.
19.5.5. Управление палитрой
19.5.5.1. Палитра и ее анализ. Максимальный набор цветов, поддерживаемых одновременно BGI-драйвером, называется палитрой и может состоять из 16 цветов, пронумерованных от 0 до 15 (так будет, например, для графических адаптеров EGA, VGA). Эти шестнадцать цветов используются по умолчанию в режимах 640x480 для VGA, 640x350, 640x200 и 320x200 для EGA как в текстовом, так и в графическом режимах.
Стандартная палитра режима 320x200 адаптера GGA (палитра С0) состоит из всего лишь четырех цветов:
0 — черный;
1 — синий;
2 — малиновый;
3 — белый.
А для того же адаптера CGA в режиме CGAHi (640x200) и для Hercules палитра состоит только из двух цветов: черного (0) и белого (1).
Числа от 0 до 15, которые используются для обозначения цветов, определяют цветовые атрибуты или, как их еще называют, «программные» цвета. Каждому программному цвету присваивается «аппаратный» цвет из так называемой полной палитры. Например, для адаптера EGA, выводящего одновременно до 16 цветов, программные цвета выбираются из полной палитры в 64 цвета, имеющейся в этом адаптере. А в адаптере VGA аппаратная палитра содержит 256 цветов. Для адаптеров класса CGA полная палитра составляет 16 аппаратных цветов, но одновременно на экране могут появиться тишь максимум четыре цвета одной из четырех программных палитр (C0...C3). У адаптеров Hercules и РС3270 полная и программная палитры состоят из двух цветов.
Для управления соответствием между программными и аппаратными цветами в модуле Graph предусмотрен ряд процедур, охватывающих практически все возможные операции с палитрой.
Рассмотрим процедуры, с помощью которых можно получить системную информацию о ней. В модуле Graph определен тип для описания палитры:
- 444 -
CONST
MaxColors*15; { максимальный программный номер цвета }
TYPE
PaletteType=RECORD
Size : Byte; { размер программной палитры}
Colors: Array [0..MaxColors] of ShortInt;
END;
Поле Size содержит количество цветов в палитре, а поле Colors содержит действующие цвета в первых Size элементах массива. Процедуры GetPalette и GetDefaultPalette возвращают в фактических параметрах значение типа PaletteType:
GetDefaultPalette( VAR Palette : PaletteType );
GetPalette( VAR Palette : PaletteType )
Они отличаются друг от друга тем, что первая процедура возвращает набор цветов, который устанавливается при инициализации графического режима, т.е. по умолчанию, а вторая процедура возвращает текущий набор цветов. Функция
GetPaletteSize : Word
возвращает результат типа Word, который показывает, какое количество цветов входит в текущую программную палитру. В принципе, эта функция возвращает значение, равное GetMaxColor+1.
19.5.5.2. Установка палитры. Для установки палитры в модуле Graph представлены три процедуры разной сложности. Процедура
SetPalette( ColorNum : Word; Color : ShortInt )
управляет только одним цветом в палитре. ColorNum — это номер программного цвета, Color — номер аппаратного цвета, который будет под ним пониматься. Например, вызов SetPalette( 0, Red ) делает красный цвет первым цветом палитры. Параметр Color может превышать максимальный программный номер цвета, но только на адаптерах EGA (0..63) и VGA. При некорректном вызове процедуры функция GraphResult вернет значение grError. Процедура
SetAllPalette( VAR Palette )