Модуль обеспечивает работу с экраном в графическом режиме.
Экран в графическом режиме представляется в виде совокупности точек - пикселов. Цвет каждого пиксела можно задавать отдельно. Начало координат находится в левом верхнем углу экрана и имеет координаты (0, 0). Количество точек по горизонтали и вертикали (разрешение экрана) и количество доступных цветов зависят от графического режима. Графический режим устанавливается с помощью служебной программы - графического драйвера.
В состав оболочки входит несколько драйверов, каждый из может работать в нескольких режимах. Режим устанавливается при инициализации графики либо автоматически, либо программистом.
Модуль Graph обеспечивает:
- вывод линий и геометрических фигур заданным цветом и стилем;
- закрашивание областей заданным цветом и шаблоном;
- вывод текста различным шрифтом, заданного размера и направления;
- определение окон и отсечение по их границе;
- использование графических спрайтов и работу с графическими страницами.
В отличие от текстового режима, в графическом курсор невидим.
Перед выводом изображения необходимо определить его стиль, то есть задать цвет фона, цвет линий и контуров, тип линий, шаблон заполнения, вид и размер шрифта, и так далее.
Эти параметры устанавливаются с помощью соответствующих процедур. Возможные значения параметров определены в модуле Graph в виде многочисленных констант.
Структура графической программы
Программа, использующая графический режим, должна содержать следующие действия:
- подключение модуля Graph;
- перевод экрана в графический режим;
- установку параметров изображения;
- вывод изображения;
- возврат в текстовый режим.
Графический режим работы
Графические драйверы располагаются в подкаталоге BGI EGAVGA.BGI
Инициализация графического режима
Выполняется процедурой модуля Graph
InitGraph (GDriver, CMode, Dpath);
Параметры процедуры:
GDriver - 1) если задается явно GDriver:=VGA;
2) если автоопределение. GDriver:=DETECT;
CMode - если GDriver задан явно, то и режим явно: 0,1,2; если автоопредел., то можно не указывать, тогда выбирается реж. наибольшего разрешения.
Dpath - путь к графическим файлам.
Если процедура InitGraph не сработала, то GDriver будет содержать код ошибки.
Error:= GraphResult;
GraphErrorMSG(Error);- выдает сообщение об ошибке на англ. яз.
Пример работы в графическом режиме:
Uses Graph;
Procedure GRinit;
var GDriver, CMode, Error:integer;
begin
GDriver:=detect;
InitGraph (GDriver, CMode, ' ');
Error:=GraphResult;
if Error<>GRok then begin
writeln('ошибка', GraphErrorMSG(Error));
halt
end;
end;
Begin
GRinit;
<рисование>
Readln; {задержка изобр. на экране }
CloseGraph;{ выгружается графический режим}
End.
Рисование графических примитивов
SetColor(<цвет>);где <цвет>- N цвета( 1-15) или название (red); -цвет
пера;
SetBkcolor(<цвет>); -цвет фона;
PutPixel(x,y, <цвет>); -выделение пиксела указанным цветом;
Рисование линий
Line(x1,y1,x2,y2); LineTo(x,y); LineRel(dx,dy);
Задание толщины и стиля линий
SetLineStyle(<тип>,<шаблон>,<толщина>);
<тип>: Solidln=0{__},
Dotteln=1{….},
Centerln=2{- -},
Dashdln=3{- -},
UserBitln=4{пользовательский тип}
<шаблон>: 0 - если <тип> =0 - 3;
если<тип>=4, то формируем из 16 пиксел (1-светится, 0-погашен:
1100110011001100); число записывается в 10-ой или 16-ой
системах счисления ;
<толщина>: Normwidth=1, Thickwidth=3.
Функции опроса местоположения курсора
GetX, GetY-определение текущих координат;
MoveTo(x,y), MoveRel(dx,dy)- перемещение ;
GetMaxX, GetMaxY-разрешающая способность по горизонтали и вертикали/
Построение фигур с большим количеством вершин (многоугольников и графиков ф-ий)
DrawPoly(Np,Point); где Np- кол. вешин, если фигура замкнутая, то Np=N+1;
Var Point: array[1..N] of PointType; массив координат вершин или точек графика
PointType= record x,y: integer end;
Работа с фрагментами изображений
- Нарисовать изображение в любом месте экрана.
- Узнать размер min прямоугольника, содержащего изображение.
size:=ImageSize(x1,y1,x2,y2); (x1,y1 (x2,y2) - Создание буфера в оперативной памяти GetMem(P, size); где Р- ссылочная переменная (адрес начала буфера), Р: pointer;
- Считываем изображение в буфер GetImage(x1,y1,x2,y2,P^)
- Помещаем изображение из буфера в любое место экрана
PutImage(x,y,P^, <режим>); (x,y) <режим>:СopyPut,
XorPut, AndPut,
NotPut, OrPut PutImage (x,y,P^,xorput); - рисование
Delay(20);
PutImage (x,y,P^,xorput); - стиране - Удаление буфера FreeMem(P, Size);
Нарисовать объект , движущийся из левого верхнего угла экрана в правый нижний.
Uses CRT, GRAPH;
Var x,y,r: integer; p: pointer;
size: word; dx, dy: integer;
<описание процедуры инициализации граф. режима GRINIT>
Begin
GRINIT;
R:=10;
SetFillStyle(solidfill, green);
Pieslice (10,10,0,360,r);
Size:= ImageSize(1,1,20,20);
GetMem(p,Size);
GetImage(1,1,20,20,p^);
SetFillStyle(1, white);
Bar(0,0,getmaxx, getmaxy);
X:=0; Y:=0; dx:=3; dy:=2;
Repeat
PutImage (x,y,P^,xorput);
Delay(20);
PutImage (x,y,P^,xorput);
Inc(x,dx);
Inc(y,dy);
until (x>=Getmaxx) or (y>= Getmaxy);
FreeMem(p, s); Readln;
CloseGraph;
End.