Практика программирования (Бейсик, Си, Паскаль)

       

Управление цветом


Процедуры воспроизведения элементарных геометрических объектов -точек, отрезков прямых, дуг окружностей или эллипсов, прямоугольников, — используют тот или иной цвет при окрашивании соответствующих пикселов. В системе 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.bas является следующая программа на Си:

Программа 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);




Содержание раздела