Управление цветом
Процедуры воспроизведения элементарных геометрических объектов -точек, отрезков прямых, дуг окружностей или эллипсов, прямоугольников, — используют тот или иной цвет при окрашивании соответствующих пикселов. В системе QBasic цвет объекта может быть задан с помощью необязательного параметра в соответствующем графическом операторе. Если он явно не указан, то объект рисуется цветом переднего плана, установленным ранее в операторе C0L0R:
C0L0R cf,cb
В режимах 12 и 13 оператор C0L0R допускает единственный параметр cf, определяющий программный цвет рисования. Его значением может быть любое число из интервала [0,15], по которому системные программы извлекут содержимое регистра палитры с номером cf и преобразуют его в физический цвет отображаемых на экране пикселов. Второй параметр сь допустим только в режиме 9 (EGA), он определяет цвет фона. В режимах 12 и 13 цвет фона устанавливается в момент объявления области вывода. По умолчанию им является черный цвет.
Приводимая ниже программа демонстрирует цветовую палитру режима 12, воспроизводя с задержкой в 1 с прямоугольники размером 100x75 пикселов, заливаемые последовательно цветами от 0 до 15.
Программа 8_04.bas
REM Демонстрация цветовой палитры
SCREEN 12
CLS
F0R Y=10 T0 310 STEP 100
F0R X=10 T0 460 STEP 150
LINE (X-l,Y-l)-(X+101,Y+76),15,В
LINE (X,Y)-(X+100,Y+75),C0L,BF
C0L=C0L+1
SLEEP 1 : ' Задержка на 1 сек NEXT X NEXT Y END
В BGI-пакете цвет переднего плана и цвет фона устанавливаются процедурами (функциями) setcoior(cf) и setbkcolor (cb). В процедурах отображения геометрических объектов в системах Turbo С и Turbo Pascal цвет рисования явно не задается. Используется только тот цвет, который был установлен с помощью setcoior. Для тех, кому английский язык не чужд, наряду с числовыми значениями кода цветности BGI-пакет предлагает набор мнемонических констант (табл. 8.1).
Таблица 8.1. Набор мнемонических констант BGI-пакета
Код | Цвет | Turbo С | Turbo Pascal | ||||||
0 | Черный | BLACK | Black | ||||||
1 | Синий | BLUE | Blue | ||||||
2 | Зеленый | GREEN | Green | ||||||
3 | Бирюзовый | CYAN | Cyan | ||||||
4 | Красный | RED | Red | ||||||
5 | Малиновый | MAGENTA | Magenta | ||||||
6 | Коричневый | BR0WN | Brown | ||||||
7 | Светло-серый | LIGHTGRAY | LightGray | ||||||
8 | Темно-серый | DARKGRAY | DarkGray | ||||||
9 | Светло-синий | LIGHTBLUE | LightBlue | ||||||
10 | Светло-зеленый | LIGHTGREEN | LightGreen | ||||||
11 | Светло-бирюзовый | LIGHTCYAN | LightCyan | ||||||
Код |
Цвет |
Turbo С |
Turbo Pascal |
||
12 |
Светло-красный |
LIGHTRED |
LightRed |
||
13 |
Светло-малиновый |
LIGHTMAGENTA |
LightMagenta |
||
14 |
Желтый |
YELL0W |
Yellow |
||
15 |
Белый |
WHITE |
White |
||
Программа 8_04.с
/* Демонстрация цветовой палитры */
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
main () {
int X,y,col=0;
int gd=0,gm;
initgraph(&gd,&gm, "");
for(y=10; y<=310; y+=100)
for(x=10; x<=460; x+=150) {
setfillstyle(1,col); /* Сплошная заливка цветом col */
bar3d(x-l,y-l,x+101,y+76,0,l);
col++;
sleep(l); /* Задержка на 1 сек*/ }
getch () ; closegraph(); }
Кроме управления двумя основными цветами переднего и заднего планов, имеется возможность изменить содержимое одного или всех регистров палитры. В системе QBasic для этой цели используются операторы PALETTE и PALETTE USING:
PALETTE reg,col PALETTE USING A%
Параметр reg задает номер модифицируемого регистра палитры, а значение col из диапазона [0,63] определяет новое содержимое указанного регистра. В случае групповой модификации всех регистров палитры их новые значения определяются байтами массива А%. Если в каком-то из этих байтов находится — 1 (0xFF), то значение соответствующего регистра палитры не изменяется.
Функции setpaiette и setallpaiette в пакете BGI ничем не отличаются от описанных выше операторов:
SetPalette(reg,col);
SetAllPalette(A);