Пятница, 18.07.2025, 17:25 Приветствую Вас Гость

On-line: Книги, учебники, статьи

Главная | Регистрация | Вход | RSS

Краски, палитры, заполнения(1)

Краски, палитры, заполнения

Процедура SetColor.

Устанавливает текущий цвет для выводимых линий и символов. Заголовок:

Procedure SetColor(Color: Word);

Здесь Color - текущий цвет.

В модуле Graph определены точно такие же константы для задания цвета, как и в модуле СИГ (см. п.13.2).

Функция GetColor. Возвращает значение типа Word, содержащее код текущего цвета. Заголовок:

Function GetColor: Word;

Функция GetMaxColor.

Возвращает значение типа Word, содержащее максимальный доступный код цвета, который можно использовать для обращения к SetColor. Заголовок:

Function GetMaxColor: Word;

Процедура SetBkColor.

Устанавливает цвет фона. Заголовок: 

Procedure SetBkColor(Color: Word);

Здесь Color - цвет фона.

В отличие от текстового режима, в котором цвет фона может быть только темного оттенка, в графическом режиме он может быть любым. Установка нового цвета фона немедленно изменяет цвет графического экрана. Это означает, что нельзя создать изображение, два участка которого имели бы разный цвет фона. Для CGA -адаптера в режиме высокого разрешения установка цвета фона изменяет цвет активных пикселей. Замечу, что после замены цвета фона на любой, отличный от 0 (Black) цвет, Вы не сможете более использовать цвет 0 как черный, он будет заменяться на цвет фона, т.к. процедуры модуля Graph интерпретируют цвет с номером 0 как цвет фона. Это означает, в частности, что Вы уже не сможете вернуть фону черный цвет!

Если Ваш ПК оснащен цветным экраном, следующая программа продемонстрирует работу процедуры SetBkColor. Программа выводит десять вложенных друг в друга прямоугольников, после чего циклически меняет цвет фона. Для выхода из программы достаточно нажать на любую клавишу.

Uses Graph, CRT; 

const

NC: array [0..15] of String [12] =

('Black','Blue','Green','Cyan','Red','Magenta',

 ' Brown','LightGray','DarkGray','LightBlue',

 'LightGreen1,'LightCyan1,'LightRed',

'LightMagenta','Yellow','White');

var

d, r, e, k, color, dx, dy: Integer;

begin

{Инициируем графику}  

d := Detect; InitGraph(d, r, ' ') ; 

e := GraphResult; if e <> grOK then

WriteLn(GraphErrorMsg(e)) 

else 

begin

{Выводим текст в центре экрана}

OutTextXY(200,GetMaxY div 2,'BACKGROUND COLOR');

dx := GetMaxX div 30; {Приращение длины}

dy := GetMaxY div 25; {Приращение высоты}

for k := 0 to 9 do{Выводим 10 прямоугольников}

Rectangle(k*dx,k*dy,GetMaxX-k*dx,GetMaxY-k*dy);

color := black; {Начальный цвет фона} 

repeat {Цикл смены фона}

SetBkColor(color) ;

SetFillStyle(0,Color);

Bar(345,GetMaxY div 2,440,GetMaxY div 2+8);

OutTextXY(345,GetMaxY div 2,NC[color]);

delay(1000);

inc(color);

if color > White then

color := Black until KeyPressed;

if ReadKey=#0 then 

k := ord(ReadKey); 

CloseGraph 

end 

end.

Функция GetBkColor.

Возвращает значение типа Word, содержащее текущий цвет фона. Заголовок:

Function GetBkColor: Word;

Процедура SetPalette.

Заменяет один из цветов палитры на новый цвет. Заголовок:

Procedure SetPalette(N: Word; Color: Shortlnt);

Здесь N - номер цвета в палитре; Color - номер вновь устанавливаемого цвета.

Данная процедура может работать только с адаптерами EGA или VGA. Она не должна использоваться с IBM8514 или 256-цветным вариантом VGA - для этих адаптеров предназначена особая процедура SetRGBPalette (см. ниже). Первоначальное размещение цветов в палитрах EGA/VGA соответствует последовательности их описания константами Black,....White, т.е. цвет с индексом 0 - черный, 1 - синий, 2 - зеленый и т.д. После обращения к процедуре все фрагменты изображения, выполненные цветом с индексом N из палитры цветов, получат цвет Color. Например, если выполнить оператор

SetPalette(2,White);

то цвет с индексом 2 (первоначально это - бирюзовый цвет Cyan) будет заменен на белый. Замечу, что цвет с индексом 0 отождествляется с цветом фона и может изменяться наряду с любым другим цветом.

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

Uses Graph, CRT; 

var

d,r,e,N,k,color: Integer;

Palette : PaletteTyper; 

begin

{Инициируем графику}

d := Detect; InitGraph(d, r, ' ') ; 

e := GraphResult; if e <> grOK then

WriteLn(GraphErrorMsg(e)) 

else 

begin

{Выбираем толстые сплошные линии}  

SetLineStyle(SolidLn, 0, ThickWidth); 

GetPalette(Palette) ; {Текущая палитра} 

for Color := 0 to Palette.Size-1 do 

begin

SetColor(Color);

Line(GetMaxX div 3,Color*10,2*GetMaxX div 3,Color*10) 

end;

{Меняем палитру и ждем инициативы пользователя}  

while not KeyPressed do

for e := 0 to Palette.Size-1 do

SetPalette(e,Random(Palette.Size)); 

if ReadKey=#0 then d := ord(ReadKey); 

CloseGraph 

end 

end.

Процедура GetPalette.

Возвращает размер и цвета текущей палитры. Заголовок:

Procedure GetPalette(var Palettelnfo: PaletteType);

Здесь Palettelnfo - переменная типа PaletteType, возвращающая размер и цвета палитры.

В модуле Graph определена константа

const

MaxColors =15; 

и тип

type

PaletteType = record

Size : Word; {Количество цветов в палитре} 

Colors : array [0..MaxColors] of Shortlnt

{Номера входящих в палитру цветов}

end;

С помощью следующей программы можно вывести на экран номера всех возможных цветов из текущей палитры.

Uses Graph; 

var

Palette: PaletteType;

d,r,e,k: Integer; 

begin

{Инициируем графику} 

d := Detect; InitGraph(d, r, ' ') ; 

e := GraphResult; if e <> grOk then

WriteLn(GraphErrorMsg(e)) 

else 

begin

GetPalette(Palette); {Получаем палитру} 

CloseGraph; {Возвращаемся в текстовый режим} 

with Palette do {Выводим номера цветов} 

for k := 0 to pred(Size) do

Write(Colors[k]:5); 

end 

end. 

Вход на сайт
Поиск
Календарь
«  Июль 2025  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей
Наш опрос
Как Вам удобнее??
Всего ответов: 341
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0