Страница 8 из 56
Управление цветом
------------------
Ниже приведено краткое описание функций управления цветом.
=================================================================
Получение информации о цвете:
getbkcolor возвращает текущий цвет фона
getcolor возвращает текущий цвет вычерчивания
getdefaultpalette возвращает структуру, определяющую палитру
getmaxcolor возвращает максимальное значение, которое можно
присвоить точке растра в текущем графическом
режиме
getpalette возвращает текущую палитру и ее размер
getpalettesize возвращает размер палитры (т.е справочной таб-
лицы палитры)
Установка одного или нескольких цветов:
setallpalette изменяет все цвета палитры на заданные
setbkcolor устанавливает текущий цвет фона
setcolor устанавливает текущий цвет вычерчивания
- 61,62 -
setpalette изменяет один цвет палитры в соответствии с
заданным аргументом
=================================================================
Перед общим описанием работы этих функций мы сперва приведем
базовые сведения о том, как в действительности создается цвет на
вашем графическом экране.
Точки растра и палитры
----------------------
Графический экран состоит из массива точек растра, каждая
точка растра соответствует одной (цветной) точке на экране. Вели-
чина (значение) такой точки растра непосредственно не задает
цвет; она является индексом в таблице цветов, называемой палит-
рой. Элемент палитры, соответствующий заданному значению точки
растра, содержит информацию о цвете данной точки.
Данная косвенная схема имеет ряд применений. Хотя аппаратура
может быть способна отображать много цветов, в конкретный момент
времени может отображаться только некоторое подмножество из этих
цветов. Число цветов, способных отображаться одновременно, равно
числу элементов в палитре (размеру палитры). К примеру, EGA аппа-
ратура может производить 64 различных цвета, но только 16 из них
могут отображаться одновременно; размер палитры для EGA=16.
Размер палитры size определяет диапазон значений точек раст-
ра: от 0 до (size-1). Функция getmaxcolor возвращает максимальное
значение точки растра (size-1) для текущих графического адаптера
и режима.
При обсуждении графических функций Турбо Си мы часто исполь-
зуем термин "цвет"; например, текущий цвет вычерчивания, цвет за-
полнения и цвет точки растра. Фактически этот цвет является зна-
чением точки растра, т. е. представляется индексом в палитре.
Только палитра определяет действительный цвет на экране. Манипу-
лируя палитрой, вы можете изменять действительно отображаемый на
экране цвет, даже без изменений значения точки растра (цвета вы-
черчивания, цвета заполнения и т.д.).
- 63,64 -
Цвет фона и вычерчивания
------------------------
Цвет фона всегда соответствует значению 0 точки растра. При
очистке некоторой области в цвет фона, точки растра этой области
просто устанавливаются в 0.
Цвет вычерчивания соответствует значению, в которое устанав-
ливаются точки растра при вычерчивании линий. Вы выбираете цвет
вычерчивания с помощью функций setcolor(n), где n есть допустимое
для текущей палитры значение точки растра.
Управление цветом на CGA
------------------------
Из-за различий в графической аппаратуре действительное уп-
равление цветом несколько различается на EGA и CGA, поэтому мы
опишем эти адаптеры раздельно. Управление цветом на адаптере AT&T
и, при низком разрешении, на MCGA аналогично управлению цветом на
CGA.
На CGA вы можете выбирать между отображением графики в низ-
ком разрешении (320x200), что позволит вам использовать 4 цвета,
и в высоком разрешении (640x200), при котором вы можете использо-
вать 2 цвета.
Низкое разрешение CGA.
В режимах низкого разрешения вы можете выбирать между че-
тырьмя предопределенными четырехцветными палитрами. В любой из
этих палитр вы можете устанавливать только ее первый элемент;
элементы 1, 2, 3 - фиксированы. Первый элемент палитры (цвет 0)
является цветом фона. Этот цвет фона может принимать значение лю-
бого из 16 доступных цветов (смотри таблицу).
Выбор конкретной палитры осуществляется путем выбора опреде-
ленного режима (CGAC0, CGAC1, CGAC2, CGAC3); эти режимы соответс-
твуют цветовым палитрам от 0 до 3, что отображено в следующей
таблице. Цвета вычерчивания для CGA и соответствующие им констан-
ты определены в файле graphics.h.
- 65,66 -
-----------------------------------------------------------------
Номер палитры Цвет, соответствующий значению точки растра
1 2 3
-----------------------------------------------------------------
0 CGA_LIGHTGREEN CGA_LIGHTRED CGA_YELLOW
(светлозеленый) (светлокрасный) (желтый)
1 CGA_LIGHTCYAN CGA_LIGHTMAGENTA CGA_WHITE
(светлоголубой) (светломалиновый) (белый)
2 CGA_GREEN CGA_RED CGA_BROWN
(зеленый) (красный) (коричневый)
3 CGA_CYAN CGA_MAGENTA CGA_LIGHTGRAY
(голубой) (малиновый) (светлосерый)
-----------------------------------------------------------------
Для того, чтобы назначить один из этих цветов цветом рисова-
ния для CGA, вызовите функцию setcolor, передав ей в качестве ар-
гумента либо номер цвета, либо соответствующее символическое имя;
например, если вы используете палитру 3 и хотите назначить голу-
бой цветом рисования:
setcolor(1); или setcolor(CGA_CYAN);
Доступные на CGA цвета фона, описанные в GRAPHICS.H, приве-
дены в следующей таблице.
----------------------------------------------
Числовое Символическая Соответствующий
значение константа цвет
----------------------------------------------
0 BLACK ЧЕРНЫЙ
1 BLUE СИНИЙ
2 GREEN ЗЕЛЕНЫЙ
3 CYAN ГОЛУБОЙ
4 RED КРАСНЫЙ
5 MAGENTA МАЛИНОВЫЙ
6 BROWN КОРИЧНЕВЫЙ
7 LIGHTGRAY СВЕТЛОСЕРЫЙ
8 DARKGRAY ТЕМНОСЕРЫЙ
9 LIGHTBLUE СВЕТЛОСИНИЙ
10 LIGHTGREEN СВЕТЛОЗЕЛЕНЫЙ
11 LIGHTCYAN СВЕТЛОГОЛУБОЙ
12 LIGHTRED СВЕТЛОКРАСНЫЙ
13 LIGHTMAGENTA СВЕТЛОМАЛИНОВЫЙ
- 67,68 -
14 YELLOW ЖЕЛТЫЙ
15 WHITE БЕЛЫЙ
---------------------------------------------
Для присваивания одного из этих цветов цвету фона на CGA ис-
пользуйте setbkcolor(color), где color - один из элементов приве-
денной выше таблицы. Отметим, что для CGA этот цвет не является
значением точки растра (индексом палитры); он непосредственно за-
дает действительный цвет.
Высокое разрешение CGA
В режиме высокого разрешения (640x200) CGA отображает два
цвета: черный цвет фона и цветное изображение. Значение точек