Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Grafika_Turbo-Pascal.doc
Скачиваний:
24
Добавлен:
08.03.2015
Размер:
362.5 Кб
Скачать

Выбор палитры, заполнения

Максимальный набор цветов доступных пользователю называется палитрой и определяется выбранным графическим режимом. В модуле 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 -функция, возвращающая палитру, устанавливаемую при инициализа-

ции графического режима.

Пример использования GetDefaultPalette.

Uses Graph;

Var oldpal,newpal:PaletteType;

Detect,Mode : integer;

Begin

Driver:=Detect;

InitGraph(,Detect,Mode,''); { инициализация графики }

GetDefaultPalette(oldpal); { сохранить старую }

newpal:=oldpal; { палитру }

{ модификация палитры }

{ восстановление исходной палитры }

SetAllPalette(oldpal);

ClearDevice;

readln;

CloseGraph

End.

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) и т.д.

Uses Graph;

Var Detect,Mode : integer;

Const UserFill:FillPatternType=

($AA, $55, $AA,$55, $AA, $55, $AA, $55);

Begin

Driver:=Detect;

InitGraph(Detect,Mode,''); { инициализация графики }

SetFillPattern(UserFill,Green);

Bar(0,0,100,100);

readln;

CloseGraph

End.

Получить шаблон заполнения, определенный пользователем можно процедурой 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]