Главная » Free Pascal » Управление цветом Free Pascal

0

В цветовом режиме D8bit выбор цвета осуществляется следующим образом. Видеокарта, управляющая окраской пикселов графического окна, использует цифро- аналоговый преобразователь (ЦАП), в котором код цветности представлен 18- разрядным двоичным кодом — по 6 разрядов на интенсивность RGB-компонентов. В блоке ЦАП находится 256 регистров, содержимое которых образует текущую

цветовую палитру. Программа имеет возможность опросить или изменить содер- жимое любого регистра палитры или содержимое всех регистров одновременно.

На выполнение графических операций оказывают влияние три основные харак- теристики видеокарты. В дополнение к упоминавшимся ранее цветам переднего (foreground color) и заднего плана (background color) добавляется цвет заливки (fill- ing color), участвующий в закраске различных замкнутых контуров. Физические компоненты цвета фона (т. е. заднего плана) хранятся в нулевом регистре ЦАП. Поэтому изменение цвета фона, осуществляемое с помощью процедуры SetBkCo- lor, сводится к переписи содержимого регистра ЦАП с указанным номером n_reg в нулевой регистр ЦАП:

SetBkColor(n_reg);            // n_reg из диапазона [0, 255]

Цвет рисования, которым воспроизводятся отрезки прямых и контуры различ- ных графических фигур (примитивов — дуг, окружностей, эллипсов, многоуголь- ников и др.), устанавливается с помощью процедуры SetColor. Ее единственным аргументом является номер регистра ЦАП, в котором зафиксирован физический цвет переднего плана:

SetColor(n_reg);             // n_reg из диапазона [0, 255]

Цвет и способ заливки устанавливается с помощью процедуры SetFillStyle: SetFillStyle(Pattern, n_reg); // n_reg из диапазона [0, 255]

Параметр Pattern (шаблон) определяет способ заполнения замкнутой фигуры (заливка сплошным цветом, всевозможные штриховки, растровая закраска и т. п.). Со всеми способами, поддерживаемыми библиотекой BGI, мы познакомимся позд- нее.

Для знакомства с палитрой по умолчанию, которая устанавливается при ини- циализации графической системы, можно воспользоваться программой из листин- га 15.1.

   Листинг 15.1. Программа  color256                                            

program color256; uses graph;

var

gd,gm: SmallInt; x,y,i,j: SmallInt;

begin

gd:=D8bit; gm:=m800x600; initgraph(gd,gm,”); for i:=0 to 15 do

for j:=0 to 15 do begin

x:=i*40;

y:=j*20; SetfillStyle(SolidFill,i*16+j); Bar(x,y,x+40,y+20);

end;

readln; closegraph;

end.

Эта  программа  последовательно  воспроизводит  прямоугольники  размером

40 20 пикселов, раскрашивая их в цвет, соответствующий содержимому очередного регистра ЦАП. Результат ее работы представлен на рис. 15.2. Нумерация цветовых оттенков продвигается от 0 до 255. В каждом столбце представлены цвета 16 по- следовательных регистров ЦАП.

Рис. 15.2. Цветовая палитра по умолчанию

В регистре ЦАП с нулевым номером находится нулевой код, соответствующий тройке минимальных интенсивностей RGB-компонентов — (0, 0, 0). На экране этому набору соответствует черный цвет. В регистре с номером 1 находится тройка (0, 0, 63), соответствующая максимальной интенсивности синего цвета. Регистр с номером 2 содержит тройку (0, 63, 0), и его содержимое воспроизводится зеленым цветом. В следующем регистре "смешаны" максимальные значения синего и зеле- ного цветов — (0, 63, 63), соответствующие бирюзовому цвету. Содержимое чет- вертого регистра равно (63, 0, 0) и отображается красным цветом, и т. д. Для обо- значения первых 16 цветовых оттенков можно использовать имена мнемонических констант, приведенные в табл. 15.4.

Таблица 15.4

Номер цвета

Цвет

Константа

Номер цвета

Цвет

Константа

0

Черный

black

1

Синий

blue

Таблица 15.4 (окончание)

Номер цвета

Цвет

Константа

Номер цвета

Цвет

Константа

2

Зеленый

green

9

Светло-синий (голубой)

lightblue

3

Бирюзовый (циановый)

cyan

10

Светло- зеленый

lightgreen

4

Красный

red

11

Светло- циановый

lightcyan

5

Малиновый

magenta

12

Светло- красный

lightred

6

Коричневый

brown

13

Светло- малиновый

lightmagenta

7

Светло-серый

lightgray

14

Желтый

yellow

8

Темно-серый

darkgray

15

Белый

white

Подбор других цветов из палитры по умолчанию обычно выполняется экспе- риментальным  путем  или  с  помощью  цветовой   гаммы,   представленной   на рис. 15.2.

Функции GetColor и GetBkColor в аргументах не нуждаются. Они возвращают значения типа Word, соответствующие номерам регистров ЦАП, приписанных в данный момент времени к цветам рисования и фона:

var

fc, bc: Word;

fc:=GetColor; bc:=getBkColor;

Для установки или опроса содержимого регистров палитры приходится исполь- зовать специальные структуры — записи типа RGBRec и PaletteType:

RGBRec = packed record Red : SmallInt; Green : SmallInt; Blue : SmallInt;

end;

PaletteType = record Size : LongInt;

Colors : array [0..MaxColors] of RGBRec; end;

Запись типа RGBRec представляет собой три двухбайтовых поля, предназначен- ных для хранения содержимого одного регистра ЦАП. Запись типа PaletteType позволяет хранить содержимое всех регистров палитры. Ее первое поле хранит размер палитры в байтах. Вслед за ним располагается массив, в котором размеща- ется содержимое всех регистров палитры. Для режима D8bit значение MaxColors (максимальный номер доступного цвета) равно 255.

var

DACreg: RGBRec; DACall: PaletteType; max_reg: SmallInt;

max_reg:=GetPaletteSize;    // опрос макс. номера регистра палитры GetPalette(DACall);         // опрос всех регистров текущей палитры GetDefdaultPalette(DACall);   // опрос палитры по умолчанию SetAllPalette(DACAll);        // установка всех регистров палитры SetPalette(n_reg,DACreg);     // изменение регистра с номером n_reg SetRGBPalette(n_reg,vR,vG,vB); // изменение регистра с номером n_reg

В процедуре SetRGBPalette значения RGB-компонентов должны принадлежать интервалу [0, 63].

Вообще говоря, особо мудрить с изменением палитры не стоит — 256 цветов палитры по умолчанию вполне достаточно для не очень мудреной BGI-графики.

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии