Максимальный набор цветов доступных пользователю называется палитрой и определяется выбранным графическим режимом. В модуле Graph определены подпрограммы позволяющие определить размер палитры, т.е. максимальное количество доступных цветов,текущий цвет пикселей и фона, изменить некоторые цвета палитры на новые или полностью заменить всю палитру цветов, получить все параметры палитры.
SetPalette(N:word,Color:shortint) - процедура замены цвета N-ой позиции палитры на Color.
Размер палитры определяется функцией GetPaletteSizeтипа word.
SetAllPalette(var Palette:PaletteType) - процедура замены всех цветов палитры на указанные, где Palette параметр, тип которого PaletteType определен в Graph.tpu как:
Type
PaletteType = record
size:byte;
Colors:array[0..MaxColor] of Shortint
end;
Первый байт задает размер палитры. Следующие n байтов указывают на устанавливаемые цвета палитры. Каждый цвет может принимать значения от -1 до 15. Значение -1 не изменяет ранее установленного цвета палитры. Следует заметить, что все изменения, вносимые в палитру будут сразу отображаться на экране, т.е. вcе появления измененного цвета палитры будут выводиться
в соответствии с новым. При неправильной передаче параметров процедуры SetPalette и SetAllPalette не выполняются, при этом функция GraphResult будет возвращать значение -11.
Для CGA адаптера указанные процедуры не работают.Рассмотренный ниже пример приведен для ERA,VGA адаптеров и производит вывод окружностей палитрой для установленного режима, затем по нажатию клавиши Enter заменяет цвет изображенных окружностей в соответствии с вновь определенным.
Пример.
uses Graph,Crt;
var
Driver,Mode,Color:integer;
Palette:PaletteType;
begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
for i:=0 to 3 do
begin
SetColor(i);
Circle(GetMaxX div 2,GetMaxY div 2,i*50)
end;
readln;
With Palette do
Begin
size:=4;
Colors[0]:=5;
Colors[1]:=10;
Colors[2]:=14;
Colors[3]:=15;
SetAllPalette(Palette);
end;
readln;
CloseGraph;
end.
GetPalette(var Palette:PaletteType) - процедура, возвращающая текущую палитру и ее размер п переменную Palette , тип которой PaletteType определен в Graph.tpu .
Пример вывода линий всеми цветами палитры, с дальнейшей заменой одного из цветов палитры на новое, выбранных случайным образом.
Uses Graph,Crt;
Var
Driver,Mode,Color:integer;
Palette:PaletteType;
begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
GetPalette(Palette);
for Color:=0 to Palette.size-1 do
begin
SetColor(Color);
Line(0,Color*10,100,Color*10)
end;
readln;
repeat
SetPalette(Random(Palette.size),
Random(Palette.size));
Delay(200);
until KeyPressed;
CloseGraph;
end.
GetDefaultPalette(var Pal PaletteType):PaletteType -функция, возвращающая палитру, устанавливаемую при инициализа-
C помощью функции GetColor можно получить цвет выводимых пикселов, функция GetMaxColor возвращает максимальное количество цветов, функция GetBKColor возвращает цвет фона. Все функции имеют тип word.
При построении графических изображений , использующих штриховку можно вводить свой образец заполнения, используя процедуру:
SetFillPattern(Pattern:FillPatternType; Color:word), которая устанавливает образец и цвет заполнения. Шаблон задается параметром Pattern, цвет параметром Color.
Тип FillPatternType определен как:
type FillPatternType=array[1..8] of byte;
Образец заполнения основывается на байтовых значениях массива Pattern. Массив шаблона имеет длину 8 байтов, каждый из которых соответствует 8 пикселям в шаблоне. Если бит в байте равен 1, пиксел отображается на экран, если 0 не отображается.
Пользователь может создавать свои шаблоны заполнения, которые можно выбрать процедурой SetFillStyle.
Первый байт будет определять битовый массив:(10101010)( шестнадцатеричное значение $AA), второй байт массив (01010101)( шестнадцатеричное значение $55) и т.д.
Получить шаблон заполнения, определенный пользователем можно процедурой GetFillPattern(var Pattern:FillPatternType).Если ранее не вызывалась процедура SetFillPattern, то Pattern возвращает массив полей со значениями $FF.
Кроме цвета можно получить установки стиля линии и заполнения областей.
Процедура GetLineSettings(var LineInfo:LineSettingsType) возвращает текущий стиль, образец и толщину линии.
Тип LineSettingsType определен как:
type LineSettingsType =
record
LineStyle:word;{ стиль линии }
Pattern:word; { образец }
Thickness:word { толщина линии }
end;
Процедура GetFillSettings(var FillInfo:FillSettingsType) возвращает последний образец заполнения и цвет, установленный процедурами SetFillStyle и SetFillPettern в переменной типа FillSettinsType, определенную как:
type FillSettingsType=
record
Pattern:word;{ образец заполнения }
Color:word; { текущий цвет }
end;
Если Pattern=UserFill, то получить определенный пользователем образец заполнения можно процедурой GetFillPattern.