Лекция

Тема: "Модуль GRAPH. Использование модуля для создания простых графических изображений".

План.

1. Графический   режим  работы экрана.

2. Инициализация  графического  режима  в  Паскале.

3. Процедуры построения графических изображений.

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

 

1. Графический режим работы экрана.

Текстовый режим работы имеет ряд недостатков. Одним из них является тот, что данный режим не позволяет создавать на экране графические изображения правильной формы.

Для решения данной задачи в Паскале существует графический режим работы с экраном.

Графический режим - это режим, при котором экран разбивается на множество точек, каждая из которых имеет свой цвет. Закрашивая точки разными цветами, можно получить плавные изображения.

При разбиении на точки экран может иметь разную размерность в зависимости от типа используемого монитора. Для компьютеров последнего поколения размер экрана имеет вид 640 Х 480.

640 точек по горизонтали (ось Х)

480 точек по вертикали (ось Y).

Для определения максимального размера экрана по осям используют функции GETMAXX, GETMAXY.

Задавая координаты точек по Х и по Y, также задавая цвет каждой точки, можно создавать изображения.

Для задания графического режима и работы в нем в Паскале имеется модуль GRAPH. Он подключается в самом начале работы программы в разделе подключения модулей и содержит набор процедур по созданию простых графический фигур, на основе которых можно получить красивое изображение.

2. Инициализация графического режима в Паскале.

Для перехода на графический режим отображения информации, необходимо определить (инициализировать) этот режим. Для инициализации используется процедура вида:

INITGRAPH из модуля GRAPH, которая настраивает и подключает драйвер графического режима.

Для инициализации в программу нужно вставлять следующий блок:

USES GRAPH;

VAR GRAPHDRIVER, GRAPHMODE, ERRORCODE: INTEGER;

BEGIN

GRAPHDRIVER:=DETECT;

INITGRAPH (GRAPHDRIVER, GRAPHMODE, 'D:\TP7\BGI');

ERRORCODE:=GRAPHRESULT;

IF ERRORCODE <> 0  THEN

BEGIN

WRITELN ('Ошибка инициализации графики; ',GRAPHERRORMSG(ERRORCODE));

WRITELN ('Работа программы прервана');

HALT (1)

END;

END.

В процедуре инициализации драйвера необходимо указывать путь к драйверу с именем EGAVGA.BGI. Если путь не совпадает с путем в примере, то его нужно ввести в соответствии с размещением драйвера.

В результате выполнения данной команды функция GRAPHRESULT равна 0, если графический режим инициализирован, в противном случае она равно коду ошибки, а функция GRAPHERRORMSG (ERROCODE) выдает на экран код ошибки. Если была ошибка, то работа программы прекращается и происходит выход из программы.

Если после выполнения данной процедуры GRAPHRESULT = 0, то экран переходит в графический режим отображения информации на экране.

Для перехода в текстовый режим после окончания работы в графическом режиме, необходимо ввести команду

CLOSEGRAPH;

 

3. Процедуры построения графических изображений.

Для построения простых графических фигур существует целый набор процедур.

Очистка экрана.

Для очистки служит процедура вида:

CLEARDEVICE;

Рисование образов.

ARC (X,Y,A,B,R);

рисует дугу. Х, Y - координаты центра дуги, А - начальный угол дуги, В - конечный угол дуги, R - радиус дуги.

BAR (X1,Y1,X2,Y2)

рисует сплошной брус. X1,Y1 - координаты верхнего левого угла, X2,Y2 - координаты правого нижнего угла.

BAR3D (X1,Y1,X2,Y2,A,B);

рисует трехмерный брус. X1,Y1 - координаты левого верхнего угла, X2,Y2- координаты правого нижнего угла, А - глубина, В - равна TOPON, если есть верхняя площадка, TOPOFF - если нет.

CIRCLE (X,Y,R);

рисует окружность. X,Y - координаты центра окружности, R - радиус окружности.

ELLIPSE (X,Y,A,B,X1,Y1);

рисует эллипс.  X,Y - координаты центра эллипса, А - начальный угол, В- конечный угол, X1 - радиус по Х, Y1 - радиус по Y.

RECTANGLE (X1,Y1,X2,Y2);

рисует прямоугольник. X1,Y1 - координаты левого верхнего угла, X2,Y2 - координаты правого нижнего угла.

LINE (X1,Y1,X2,Y2);

рисует линию на экране. X1,Y1 - координаты начала линии, X2,Y2 - координаты конца линии.

Задание типа линий.

При рисовании образов можно задать какой линией этот образ будет нарисован.

Для задания типа линии служит процедура вида:

SETLINESTYLE (A,B,C);

А - тип линии, В - образ линии, С - толщина.

Тип линии может принимать значения:

SOLIDLN (0) -  сплошная линия;

DOTTEDLN (1) - точечная линия;

CENTERLN (2) - штрих-пунктирная линия;

DASHEDLN (3) - пунктирная линия.

Толщина линии может принимать одно из значений

NORMWIDTH (1) - нормальная толщина;

THICKWIDTH (3) - жирная линия.

Установленный тип линии действует на все рисуемые фигуры до тех пор, пока не встретится такой же оператор изменения типа линии.

Замечание: тип линии действует только при рисовании линий, прямоугольников и трехмерных брусьев.

Толщина линии действует при рисовании всех фигур кроме бруса BAR.

Работа с цветом.

В Паскале существует процедура задания цвета контура рисуемой фигуры, цвета фона экрана и раскрашивания замкнутой фигуры.

Задание цвета контура.

SETCOLOR (A);

А - номер цвета. Номера цветов полностью совпадают с номерами цветов текстового режима.

Установленный цвет контура действует на все рисуемые фигуры, пока не встретится такой же оператор изменения цвета контура.

Задание цвета фона экрана.

SETBKCOLOR (A);

A - номер цвета.

Раскрашивание замкнутой области.

FLOODFILL (X,Y,A);

X,Y - координаты любой точки находящейся внутри замкнутой области, А - цвет контура области. Процедура закрашивает область вокруг точки до контура с заданным цветом. Заполнение производится цветом и типом заполнителя, указанным в процедуре SETFILLSTYLE.

При заполнении прямоугольников они должны быть нарисованы сплошной линией.

Задание типа закраски и цвета закраски.

SETFILLSTYLE (A, B);

А -     тип закраски

В -      цвет закраски.

Тип    закраски может принимать одно из значений:

0 -      закраска фоновым цветом;

1 -      сплошная закраска области;

2 -      закраска горизонтальными линиями;

3 -      закраска линиями (слеш);

4 -      закраска жирными линиями (слеш);

5 -      закраска жирными линиями (обратный слеш);

6 -      закраска линиями (обратный слеш);

7 -      закраска редкой штриховкой;

8 -      закраска частой штриховкой;

9 -      закраска прерывистой линией;

10 - закраска линией из редких точек;

11 - Закраска линией из частых точек;

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

Замечание:

при рисовании брусьев они автоматически заполняются в соответствии со стилем заполнения;

остальные замкнутые фигуры заполняются установленным стилем при помощи процедуры FLOODFILL.

Примеры:

USES GRAPH;

VAR GRAPHDRIVER, GRAPHMODE, ERRORCODE: INTEGER;

BEGIN

GRAPHDRIVER:=DETECT;

INITGRAPH (GRAPHDRIVER, GRAPHMODE, 'C:\TP7\BGI');

ERRORCODE:=GRAPHRESULT;

IF ERRORCODE <> 0  THEN

BEGIN

WRITELN ('Ошибка инициализации графики; ',GRAPHERRORMSG(ERRORCODE));

WRITELN ('Работа программы прервана');

HALT (1)

END;

Установка синего фона экрана

SETBKCOLOR (1);

Рисуем брус красной линией и закрашиваем его желтым цветом

сплошной закраской

SETCOLOR (4);

SETFILLSTYLE(1,14);

BAR (10,60,20,100);

Рисуем трехмерный брус красной толстой линией и закрашиваем его

горизонтальной штриховкой зеленым цветом (верхняя площадка видна)

SETLINESTYLE(0,0,3);

SETFILLSTYLE(2,2);

BAR3D(40,60,50,100,10,TOPON);

Рисуем трехмерный брус красной толстой линией и закрашиваем его

наклонной штриховкой красным цветом (верхняя площадка не видна)

SETFILLSTYLE(3,4);

BAR3D (70,60,80,100,10,TOPOFF);

Рисуем дугу зеленой толстой линией

SETCOLOR (2);

ARC (150,150,180,360,70);

Рисуем точечную толстую линию бирюзового цвета через весь экран

SETCOLOR (3);

SETLINESTYLE (1,0,3);

LINE (0,GETMAXY,GETMAXX,0);

Рисуем эллипс толстой линией желтого цвета и закрашиваем его

жирными наклонными линиями малиновым цветом

SETCOLOR (14);

ELLIPSE (270,270,0,360,40,10);

SETFILLSTYLE(4,5);

FLOODFILL (270,270,14);

Рисуем неполный эллипс толстой светло-бирюзовой линией

SETCOLOR(11);

ELLIPSE (350,270,0,90,20,50);

Рисуем окружность тонкой красной линией и закрашиваем ее

жирными наклонными линиями светло-серого цвета

SETLINESTYLE(0,0,1);

SETCOLOR(4);

CIRCLE (470,175,75);

SETFILLSTYLE (5,7);

FLOODFILL(470,175,4);

Рисуем прямоугольник толстой сплошной линией малинового цвета

и закрашиваем его прерывистыми линиями бирюзового цвета.

SETCOLOR(5);

SETLINESTYLE (0,0,3);

RECTANGLE (250,5,350,100);

SETFILLSTYLE (9,3);

FLOODFILL (300,15,5);

READLN;

CLOSEGRAPH

END.

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

Для выдачи текста в графическом режиме целесообразно использовать специальные процедуры.

Выдача текста на экран.

OUTTEXTXY (X,Y,текст в кавычках);

Процедура выводит текст с позиции,  задаваемой координатами X,  Y. При задании координат нужно иметь ввиду,  что текст рисуется в направлении вправо-вниз.

В качестве текста в кавычках может быть произвольный  набор  латинских букв, цифр и других символов. Русский алфавит не поддерживается !!!

Задание параметров текста.

Перед выводом текста на экран, можно задать его параметры (шрифт, направление и размер).

SETTEXTSTYLE (шрифт, направление, размер);

Шрифт может принимать значения:

0   -    обычный растровый шрифт;

1   -    триплексный шрифт;

2   -    малый шрифт;

3   -    шрифт саншериф;

4   -    готический шрифт.

Направление может принимать значения:

0 - слева направо;

1 - снизу вверх.

Размер - произвольный размер символов в пикселах.

Вертикальный текст рисуется сверху вниз, но пишется снизу вверх.

Задание цвета символов.

Текст выводится цветом, заданным последней процедурой SETCOLOR. Если цвет не подходит, то измените с помощью этой процедуры цвет символов.

Примеры:

USES GRAPH;

VAR GRAPHDRIVER, GRAPHMODE, ERRORCODE: INTEGER;

BEGIN

GRAPHDRIVER:=DETECT;

INITGRAPH (GRAPHDRIVER, GRAPHMODE, 'C:\TP7\BGI');

ERRORCODE:=GRAPHRESULT;

IF ERRORCODE <> 0  THEN

BEGIN

WRITELN ('Ошибка инициализации графики; ',GRAPHERRORMSG(ERRORCODE));

WRITELN ('Работа программы прервана');

HALT (1)

END;

Установлен синий цвет фона

SETBKCOLOR (1);

Текст выводится зеленым цветом. Шрифт - обычный,

направление - слева направо, размер - 3

SETCOLOR (4);

SETTEXTSTYLE(0,0,3);

OUTTEXTXY (40, 0, 'NORMAL FONT, SIZE - 3');

Текст выводится желтым цветом. Шрифт триплексный,

направление - вертикальное, размер - 2

SETCOLOR (14);

SETTEXTSTYLE (1,1,2);

OUTTEXTXY (10,50,'TRIPLEX FONT, SIZE - 2');

Текст выводится зеленым цветом. Шрифт - малый,

направление - слева направо, размер - 5

SETCOLOR (2);

SETTEXTSTYLE (2,0,5);

OUTTEXTXY (240,GETMAXY DIV 2, 'SMALL FONT, SIZE - 5');

Текст выводится белым цветом. Шрифт – саншериф,

направление - вертикальное, размер - 1

SETCOLOR (15);

SETTEXTSTYLE (3,1,1);

OUTTEXTXY (GETMAXX-30, 30, 'SANS SERIF FONT, SIZE - 1');

Текст выводится светло-серым цветом. Шрифт - готический,

выравнивание - слева направо, размер - 5

SETCOLOR (7);

SETTEXTSTYLE (4,0,3);

OUTTEXTXY (140, 300, 'GOTHIC FONT, SIZE - 5');

READLN;

CLOSEGRAPH;

END.