Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции информатика.doc
Скачиваний:
59
Добавлен:
11.04.2015
Размер:
2.47 Mб
Скачать

7.7 Модуль graph

Cодержит процедуры и функции, обеспечивающие работу с экраном в графическом режиме (создание изображений).

  1. В графическом режиме весь экран разбивается на точки (пиксели – от англ. pixel). Каждую точку можно закрасить в любой цвет, таким образом из различных комбинаций точек создается изображение.

  2. Каждая точка имеет координаты (х, у), х увеличивается по горизонтали слева направо, у – по вертикали сверху вниз. Верхний левый угол имеет координаты (0, 0), количество пикселей зависит от типа видеоадаптера и режима его работы. Для адаптера VGA – 640х480 (стандартный режим). Чем больше пикселей (точек), тем выше качество изображения.

{Драйвер устройства – программа управления устройством.

Видеоадаптер – системное устройство, непосредственно управляющее монитором и выводом информации на экран. Основные части – видеоконтроллер, видеоBIOS, видеопамять и т.д.}

  1. В графическом режиме можно выделить на экране графическое окно, тогда координаты отсчитываются внутри окна, верхний левый угол считается точкой (0,0).

  2. В графическом режиме, в отличие от текстового, курсор невидим на экране, но также можно переместить его в любую точку экрана, получить его текущие координаты.

Процедуры и функции управления графическими режимами.

initgraph (gd, gm, path); - процедура инициализации графического режима.

gd – код драйвер графического адаптера:

для CGA gd=1 или CGA

для EGA gd=3 или EGA

для VGA gd=9 или VGA

для автоматического определения драйвера gd=0 или Detect;

gm – код графического режима, устанавливается процедурой.

gd, gm – переменные целого типа!

path – строка, содержащая путь к драйверу: ‘c:\tp6\bgi’, т.е. вам надо сначала найти файл GRAPH.TPU и

здесь указать путь до этого файла.

closegraph; - процедура завершения графического режима и перехода в текстовый режим.

graphresult: integer; - возвращает код ошибки последней графической операции (0 – успешное выполнение).

grapherrormsg (cool: intrger):string; - возвращает сообщение об ошибке для заданного кода ошибки.

restorecrtmode; - процедура восстановления текстового режима.

setgraphmode (gm); - процедура установления графического режима.

Пример 1.

uses crt, graph;

var gd, gm: integer;

begin

gd:=detect;

initgraph (gd, gm, ‘c:\tp6\bgi’); {укажите правильный путь до bgi}

if graphresult <> 0 then

begin

write (‘ошибка графики:’, grapherrormsg (graphresult));

halt;

end;

closegraph;

end.

Процедуры управления экраном и окном.

cleardevice; - процедура очистки графического экрана, заполнения его цветом фона, установления курсора в (0,0).

setviewport (x1, y1, x2, y2: integer; clip: boolean); - процедура установки графического окна.

x1, y1 – верхний левый угол,

x2, y2 – нижний правый угол,

clip – ограничитель фигур. Если clip=true, то построение фигур происходит только в пределах окна, в противном случае фигуры могут выходить за пределы окна.

clearviewport; - процедура очистки графического окна (заполняет цаетом фона, курсор в (0,0)).

Процедуры и функции работы с точками.

GetmaxX: integer; - возвращает максимальное значение координаты x экрана.

GetmaxY: integer; - возвращает максимальное значение координаты y экрана.

GetX: integer; - возвращает координату x текущей позиции на экране.

GetY: integer; - возвращает координату y текущей позиции на экране.

GetPixel (x,y): word; - возвращает цвет точки с заданными координатами.

PutPixel (x,y,color); - процедура закрашивает точки с координатами (x,y) в цвет color.

Процедуры работы с линиями

line (x1, y1, x2, y2); - проводит прямую между точками (x1,y1) и (x2,y2).

moveto (x,y); - перемещает курсор в точку (х,у).

lineto (x,y); - проводит прямую из текущей точки в точку с координатами (x,y).

linerel (dx,dy); - проводят прямую из текущей точки в точку, сдвинутую на dx и dy: (x+dx, y+dy).

moverel (dx,dy); - перемещает курсор в точку, сдвинутую на dx, dy.

Процедуры построения фигур из линий.

bar (x1, y1, x2, y2); - построение закрашенного прямоугольника

(x1,y1)

(x2,y2)

bar3d (x1, y1, x2, y2, gr, top); - построение закрашенного параллелепипеда, gr – ширина боковой грани (отсчитывается по горизонтали), top = true – рисовать верхнюю грань

gr

(x1, y1)

(x2, y2)

rectangle (x1, y1, x2, y2); - построение контура прямоугольника

arc (x, y, st, end, r); - построение дуги окружности, (х,у) – координаты центра, st – угол начала, end – угол конца дуги, r – радиус. Отсчет идет против часовой стрелки от горизонтальной оси справа от центра.

circle (x, y, r); - построение окружности, (х,у) – центр, r – радиус.

ellipse (x, y, st, end, xr, yr); - построение дуги эллипса, (x,y) – центр, st, end – углы начала и конца, xr, yr – радиусы по оси х и у.

fillellipse (x, y, xr, yr); - построение закрашенного эллипса.

pieslice (x, y, st, end, r); - построение закрашенного сектора круга.

sector (x, y, st, end, xr, yr); - построение закрашенного сектора эллипса.

Пример:

x1:=10; y1:=10; x2:=100; y2:=50; dx:=40; dy:=20;

for i:=1 to 10 do

begin

bar(x1, y1, x2, y2);

x1:=x1+dx; x2:=x2+dx;

y1:=y1+dy; y2:=y2+dy;

end;

Процедуры установки цветов и стилей.

setcolor (color); - устанавливает текущий цвет рисования (для линий и текста).

setbkcolor (color); - устанавливает цвет фона экрана.

setlinestyle (sl, p,t); - установка стиля и толщины линии (sl – стиль, p – шаблон при sl=4, t – толщина линии).

sl = 0 – сплошная t = 1 – нормальная

sl = 1 – пунктирная t = 3 – толстая

sl = 2 – штрихпунктирная

sl = 3 – штриховая

sl = 4 – задается пользователем (р – шаблон из 11100110101…) p: word;

setfillstyle (sl, color); - установка стиля и цвета заполнения фигур.

sl = 0 – цвет фона (нет заполнения) sl = 7 – клетка

sl = 1 – заполнение цветом sl = 8 – косая клетка

sl = 2 – заполнение пунктиром sl = 9 – частая сетка

sl = 3 – sl = 10 – редкие точки

sl = 4 – толстыеsl = 11 – частые точки

sl = 5 – толстыеsl = 12 – задается пользователем

sl = 6 –

floodfill (x, y, colline); - закрашивает замкнутую область, ограниченную непрерывной линией. (х,у) – координаты любой точки внутри области, colline – цвет линии, до которой закрашивается.

Пример: Построить спираль с начальной точкой (хс,ус), n витками и начальным углом α.

uses crt, graph;

const n=10; alf=pi; dt=pi/45;

var gd, gm, x, y, xc, yc, i, j: integer;

procedure Spi(xc,yc,n: integer; dt,alf: real);

begin

moveto(xc,yc);

t:=alf;

for i:=1 to n do

for j:=1 to 90 do

begin

t:=t+dt; r:=2*t;

x:=round(r*cos(t)+xc); x=r*cos(t)окружность, t-угол.

y:=round(r*sin(t)+yc); y=r*sin(t) r увеличиваем, получаем

lineto(x,y); спираль.

end;

end;

begin

gd:=detect;

initgraph (gd, gm, ‘L:\tp6\bgi’);

if graphresult <> 0 then

begin

write (‘ошибка графики:’, grapherrormsg (graphresult));

halt;

end;

xc:=getmxx div 2;

yc:=getmaxy div 2;

spi(xc,yc,n,dt,alf);

readln;

closegraph;

end.

Процедуры работы с текстом.

outtext (text: string); - выводит на экран текстовую строку, начиная с текущей позиции.

outtext(‘hello’);

outtextxy (x, y, text); - выводит на экран текстовую строку, начиная с заданных координат (х,у).

outtextxy(100,100,‘hello’);

settextstyle (font, dir, size); - устанавливает стиль текста

font – шрифт dir – направление size – размер символов

0 – стандартный 0 – слева направо (0-30)

1 – утроенный 1 – сверху вниз

2 – маленький

3 – прямой

4 – готический

settextjustify (horiz, vert); - устанавливает выравнивание текста на экране (horiz-горизонтальное, vert-вертикальное).

0 – слева (снизу)

1 – по центру

2 – справа (сверху)

Процедуры обмена с памятью

getimage (x1, y1, x2, y2, M); - копирует в массив М прямоугольную область экрана, заданную координатами (х1,у1) и (х2,у2).

putimage (x, y, M, bit); - выводит изображение из массива М на экран. (х,у) – координаты точки, в которой будет левый верхний угол изображения, М – массив, в котором было сохранено изображение, bit – операция объединения выводимого изображения с имеющимся на экране.

0 – mov экран + массив- старое изображение исчезает

1 – xor +- стираются точки пересечения

2 – or +- оба изображения

3 – and +- остаются точки пересечения

Пример1: Программа перемещения по экрану графического объекта

uses crt, graph;

var gd, gm, x, y: integer;

m: array [1..1500] of byte;

begin

gd:=detect;

initgraph (gd, gm, ‘c:\tp6\bgi’);

if graphresult <> 0 then

begin

write (‘ошибка графики:’, grapherrormsg (graphresult));

halt;

end;

circle(20,20,20);

getimage(0,0,40,40,m);

x:=0; y:=0;

readln;

while x<600 do

begin

putimage(x,y,m,1);

x:=x+2; y:=y+1;

putimage(x,y,m,1);

delay(100);

end;

closegraph;

end.