Реферат: Графика в Турбо Паскале
1.6 Краски, палитры, заполнения
Процедура SetCOlor. Устанавливает текущий цвет для вводимых линий и символов. Заголовок:
Procedure SetColor(Color: Word);
Здесь Color – текущий цвет.
Процедура SetBkColor. Устанавливает цвет фона. Заголовок:
Procedure SetBkColor (Color: Word);
Здесь Color - цвет фона.
В отличие от текстового режима, в котором цвет фона может быть только темного оттенка, в графическом режиме он может быть любым. Установка нового цвета фона, немедленно изменяет цвет графического экрана. Это означает, что нельзя создать изображение, два участка которого имели бы разный цвет фона. Для GGA-адаптера в режиме высокого разрешения установка цвета фона изменяет цвет активных пикселей. Замечу, что после замены цвета фона на любой, отличный от 0 (Black) цвет. Вы не сможете более использовать цвет 0 как черный, он будет заменяться на цвет фона, т.к. процедуры модуля Graph интерпретируют цвет с номером 0 как цвет фона. Это означает, в частности, что Вы уже не сможете вернуть фону черный цвет!
Если Ваш ПК оснащен цветным экраном, следующая программа продемонстрирует работу процедуры SetBkColor. Программа выводит десять вложенных друг в друга прямоугольников, после чего циклически меняет цвет фона. Для выхода из программы достаточно нажать на любую клавишу.
Процедура SetFillStyle. Устанавливает стиль (тип и цвет). Заголовок:
Procedure SetFillStile(Fill, Color: Word);
Здесь Fill – тип заполнения; Color – цвет заполнения.
С помощью заполнения можно покрывать какие-либо фрагменты изображения периодически повторяющимся узором.
Процедура FloodFill. Заполняет произвольную замкнутую фигуру, используя текущий стиль заполнения(узор и цвет). Заголовок:
Procedure FloodFill(X, Y: Integer; Border: Word);
Здесь X, Y – координаты любой точки внутри замкнутой фигуры; Border – цвет граничной линии. Если фигура не замкнута, заполнение «разольется по всему экрану.
1.7. Сохранение и выдача изображений
Функция ImageSize. Возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения. Заголовок:
Function ImageSize(X1, Y2, X2, Y2: Integer): Word;
Здесь X1..Y2 – координаты левого верхнего(X1,Y1) и правого нижнего(X2,Y2) углов фрагмента изображения.
Процедура GetImage. Помещает в память копию прямоугольного фрагмента изображения. Заголовок:
Procedure GetImage(X1, Y1, X2, Y2: Integer; var Buf);
Здесь X1..Y2 – координаты углов фрагмента изображения; Buf – переменная или участок кучи, куда будут помещена копия видеопамяти с фрагментом изображения.
Размер Buf должен быть не меньше значения, возвращаемого функцией ImageSize с теме же координатами X1..Y2.
Процедура PutImage. Выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой GetImage. Заголовок:
Procedure PutImage(X, Y: Integer; var Buf; Mode: Word);
Здесь X, Y –координаты левого верхнего угла того места на экране, куда будет скопирован фрагмент изображения; Buf – переменная или участок кучи, откуда берется изображение; Mode – способ копирования.
Как видим, координаты правого нижнего угла не указываются, так как они полностью определяются размерами вновь выводимой на экран копии изображения. Координаты левого верхнего угла могут быть какими угодно, лишь бы только выводимая копия уместилась в пределах экрана(если копия не сможет разместиться на экране, она не выводится и экран остается без изменений).
Параметр Mode определяет способ взаимодействия вновь размещаемой копии уже имеющимся на экране изображением. Взаимодействие осуществляется путем применения кодируемых этим параметром логических операций к каждому биту копии и изображения.
2. ЛИСТИНГ ПРОГРАММЫ
Program Brodvey;
Uses Graph,Crt;
Var i, a, y, x: integer;
procedure init;
var gD, gM, EC:integer;
begin gD:=detect;
InitGraph(gD, gM, '');
end;
begin init;
SetColor(1);
Line(520,0,0,192);
Line(530,0,0,210);
SetFillStyle(1,8);
FloodFill(525,0,1);
Line(550,0,0,450);
Line(565,0,0,600);
SetFillStyle(1,0);
FloodFill(540,0,1);
SetFillStyle(1,10);
FloodFill(555,0,1);
Line(800,0,0,1700);
SetFillStyle(9,10);
FloodFill(555,0,1);
SetFillStyle(1,8);
FloodFill(570,0,1);
SetFillStyle(9,2);
FloodFill(630,400,1);
Line(0,100,90,100);
LIne(90,100,90,158);
SetFillStyle(1,4);
FloodFill(2,120,1);
Line(5,105,20,105);
Line(5,105,5,115);
Line(20,105,20,115);
Line(5,115,20,115);
SetFillStyle(1,14);
FloodFill(7,110,1);
Line(40,105,55,105);
Line(40,105,40,115);
Line(55,105,55,115);
Line(40,115,55,115);
SetFillStyle(1,14);
FloodFill(45,110,1);
Line(70,105,85,105);
Line(70,105,70,115);
Line(85,105,85,115);
Line(70,115,85,115);
SetfillStyle(1,14);
FloodFill(80,110,1);
Line(5,130,20,130);
Line(5,130,5,140);
Line(20,130,20,140);
Line(5,140,20,140);
SetFillStyle(1,14);
FloodFill(7,135,1);
Line(40,130,55,130);
Line(40,130,40,140);
Line(55,130,55,140);
Line(40,140,55,140);
SetFillStyle(1,14);
FloodFill(45,135,1);
Line(70,130,85,130);
Line(70,130,70,140);
Line(85,130,85,140);
Line(70,140,85,140);
SetFillStyle(1,14);
FloodFill(75,135,1);
Line(0,60,40,60);
Line(40,60,40,100);
SetFillStyle(1,5);
FloodFill(5,65,1);
Line(5,70,15,70);
Line(5,70,5,80);
line(15,70,15,80);
Line(5,80,15,80);
SetfillStyle(1,14);
FloodFill(10,75,1);
Line(25,70,35,70);
Line(35,70,35,80);
Line(25,70,25,80);
Line(25,80,35,80);
SetFillStyle(1,14);
FloodFill(30,75,1);
Line(0,15,55,15);
Line(55,15,55,100);
SetFillStyle(1,6);
FloodFill(10,20,1);
Line(5,40,15,40);
Line(5,40,5,55);
Line(15,40,15,55);
Line(5,55,15,55);
SetFillStyle(1,14);
FloodFill(10,45,1);
Line(25,40,35,40);
Line(25,40,25,55);
Line(35,40,35,55);
Line(25,55,35,55);
SetFillStyle(9,8);
FloodFill(30,45,1);
Line(45,40,55,40);
Line(45,40,45,55);
Line(55,40,55,55);
Line(45,55,55,55);
SetFillStyle(1,14);
FloodFill(50,45,1);
Line(60,45,70,45);
Line(60,45,60,60);
Line(70,45,70,60);
Line(60,60,70,60);
Setfillstyle(1,14);
Floodfill(65,50,1);
Line(90,45,100,45);
Line(90,45,90,60);
Line(100,45,100,60);
Line(90,60,100,60);
SetFillstyle(1,14);
FloodFill(95,50,1);
Line(90,80,90,90);
Line(90,90,105,90);
Line(105,80,105,90);
Line(90,80,105,80);
SetFillStyle(1,14);
FloodFill(95,85,1);
line(70,80,70,90);
line(70,80,55,80);
Line(55,80,55,90);
Line(55,90,70,90);
SetFillStyle(9,8);
FloodFill(59,85,1);
Line(120,90,120,110);
Line(120,110,135,110);
Line(135,110,135,90);
Line(120,90,135,90);
SetFillStyle(1,14);
FloodFill(125,95,1);
Rectangle(155,90,170,110);
SetFillStyle(1,14);
FloodFill(165,95,1);
Rectangle(190,60,200,70);
SetFillStyle(1,14);
FloodFill(195,65,1);
Rectangle(210,60,220,70);
SetFillStyle(1,14);
FloodFill(215,65,1);
Rectangle (230,60,240,70);
SetFillStyle(1,14);
FloodFill(235,65,1);
Rectangle(190,80,200,90);
SetFillStyle(1,14);
FloodFill(195,85,1);
Rectangle(210,80,220,90);
SetFillStyle(1,14);
FloodFill(215,85,1);
Rectangle(230,80,240,90);
SetFillStyle(1,14);
FloodFill(235,85,1);
Rectangle(205,30,230,35);
SetFillStyle(1,14);
FloodFill(210,32,1);
Rectangle(240,30,255,35);
SetFillStyle(9,8);
FloodFill(245,32,1);
Rectangle(265,30,290,35);
SetFillStyle(1,14);
FloodFill(270,32,1);
Rectangle(300,30,325,35);
SetFillStyle(1,14);
FloodFill(310,32,1);
Rectangle(265,40,290,45);
SetFillStyle(1,14);
FloodFill(270,42,1);
Rectangle(300,40,325,45);
SetFillStyle(9,8);
FloodFill(310,42,1);
Rectangle(265,50,290,55);
SetFillStyle(1,14);
FloodFill(270,52,1);
Rectangle(300,50,325,55);
SetFillStyle(1,14);
FloodFill(310,52,1);
Rectangle(300,60,325,65);
SetFillStyle(1,14);
FloodFill(310,62,1);
Rectangle(265,60,290,65);
SetFillStyle(1,14);
FloodFill(270,62,1);
Rectangle(360,50,365,55);
SetFillStyle(9,8);
FloodFill(362,52,1);
Rectangle(360,40,365,45);
SetFillStyle(1,14);
FloodFill(362,42,1);
Rectangle(370,45,375,40);
SetFillStyle(1,14);
FloodFill(372,42,1);
Rectangle(360,30,365,35);
SetFillStyle(1,14);
FloodFill(362,31,1);
Rectangle(370,30,375,35);
SetFillStyle(1,14);
FloodFill(372,32,1);
Rectangle(390,25,395,30);
SetFillStyle(9,8);
FloodFill(392,28,1);
Rectangle(390,15,395,20);
SetFillStyle(1,14);