Графика в паскале.
Графические функции паскаля описаны в модуле GRAPH. Модуль подключается к программе с помощью ключевого слова USES.
Пример.
program t34;
Uses graph;
Var ...
...
Основные процедуры и функции модуля GRAPH.
Процедура InitGraph инициирует перевод видеоадаптера в видеорежим. Общий вид:
InitGraph(Driver,Mode,Path);
Driver - параметр, определяющий графический драйвер; 0 - автоопределение,9 - VGA.Mode - параметр, задающий один из графических режимов. Для VGA 0 - 640X200 16 цветов, 1- 640Х350 16 цветов, 2 - 640Х480 16 цветов. Если стоит автоопределение, то параметр Mode надо задавать, выбор будет сделан в пользу максимально возможного из режимов.Path - имя файла и путь графического драйвера. Указывать надо только путь. Обычно в Паскале используется egavga.bgi. Он расположен в каталоге(например): D:\tp7\BGI\...
Пример.
InitGraph(9,2,'d:\tp7\bgi\') ;
Замечание редактора: указанный пример не будет работать, так как первые два аргумента у процедуры InitGraph - параметры-переменные. То есть, числа 9 и 2 надо поместить в переменные типа Integer, и имена этих переменных ставить в качестве первых двух аргументов:
var gd,gm: integer
.........
gd:=9;
gm:=2;
InitGraph (gd,gm,'d:\tp7\bgi\');
Процедура DetectGraph - тестирует аппаратуру и определяет, какой графический драйвер и режим (максимально допустимые) подходят для данного видеоадаптера.
Общий вид:
DetectGraph (Driver,Mode);
Driver - параметр, определяющий подходящий тип графического драйвера.
Mode - параметр, задающий один из графических режимов, поддерживаемых данным драйвером.
Пример.
USES GRAPH
VAR D,M:INTEGER;
BEGIN
DetectGraph(D,M);
Write('Тип графического адаптера: ',D,'Графический режим: ',M);
END.
Если видеоадаптер не был найден, то переменная Driver вернет
значение -2.
Функция GraphResult - возвращает код ошибки графической операции, выполнявшейся последней.
Общий вид:
GrapgResult;
Пример.
USES GRAPH
VAR H,k,l: INTEGER;
BEGIN
DetectGrahp(k,l);
InitGraph(k,l,'d:\tp7\bgi\');
H:=GraphResult;
If h=0 then write('OK') elseWrite('Error');
END.

Значения возвращаемые GraphResult:
&nbsp0 - без ошибок
-1 - не инициализирован граф. режим
-2 - не удалось определить тип адаптера
-3 - не обнаружен файл с драйвером
-4 - Обнаруженный файл не содержит соответствующего драйвера
-5 - недостаточно памяти для загрузки драйвера
-6 - недостаточно памяти для просмотра областей
-7 - недостаточно памяти для заполнения областей
-8 - не обнаружен файл со шрифтом
-9 - недостаточно памяти для загрузки шрифта
-10 - недопустимый режим для выбранного драйвера
-11 - общая ошибка
-12 - ошибка ввода-вывода
-13 - неверный формат шрифта
-14 - неверный номер шрифта
Функция GraphErrorMsg - возвращает текст, по-английски, сообщения об ошибке.
Пример.
...
GraphResult(i);
GraphErrorMsg(i);
...
Процедура RestoreCrtMode - осуществляет переход в видеорежим (текстовый), который использовался до перехода в графический режим. Не освобождает память и не сбрасывает параметры графического режима.
Пример.
...
RestoreCrtMode:
...
Процедура SetGraphMode - устанавливает для используемого драйвера новый графический режим и очищает экран. Переходит в один из доступных режимов для данного драйвера (в отличие от InitGraph).
Общий вид:
SetGraphMode(Mode);
Mode - целое число от 0 до 5, определяющее режим. С помощью SetGraphMode можно переходить в другой графический режим, отличный от используемого. Совместно с процедурой RestoreCrtMode может использоваться, чтобы временно и быстро переходить из графического в текстовый режим и обратно.
SetGraphMode устанавливает для всех графич. параметров (палитра, цвет, и т. п.) значения по умолчанию, заданные для данного режима.
Функция GetGraphMode - возвращает числовой код используемого в данный момент графического режима. Для VGA это 0,1 или 2.
Пример.
...
Var I: integer;
...
I:=GetGraphMode;:
...
Функция GetModeName - возвращает строку с именем используемого графического режима.
Пример.
...
Var I: integer;
...
I:=GetGraphMode;
Write('Графический режим: ',GetModeName(i));
...
Функция GetDriverName - возвращает имя (без расширения) используемого в данный момент драйвера.
Пример.
...
Var I:string;
...
I:=GetDriverName;
Write('Драйвер: ',i);
...
или
...
Write('Драйвер', GetDriverName);
...
Функция GetMaxMode - возвращает код предельного графического режима загруженного драйвера, в котором может работать графический адаптер.
Пример.
USES GRAPH;
VAR I:INTEGER;
BEGIN
INITGRAPH(0,0,'');(*ИЩЕМ ДРАЙВЕР В КАТАЛОГЕ С
ПРОГРАММОЙ*)
(*ред.:этот пример опять не работоспособен*)
I:=GetMaxMode;
...
END.
Процедура GetModeRange - возвращает диапазон допустимых графических режимов для указанного драйвера.
Общий вид:
GetModeRange(Driver,MinMode,MaxMode);
Driver - код графического драйвера, MinMode - код <минимального> режима, MaxMode - код предельно допустимого режима для данного драйвера.
Пример.
...
Var minmod,maxmod:integer;
...
GetModeRange(9,minmod,maxmod);
Write('Минимальный режим: ',minmode,'Предельный режим:
',maxmode);
...
Процедура CloseGraph - Восстанавливает видеорежим (текстовый), использовавшийся до перехода в графический режим, освобождает память от графических буферов и драйвера.
Пример.
...
InitGraph(0,0,''); (*ред.: опять неработоспособный пример*)
CloseGraph;
...
Работа с изображениями.
Определение.

Палитрой называется упорядоченный набор цветов, доступных в данном графическом режиме.
Определение.
Тип Word - целое число от 0 до 65535.
Процедура SetColor - устанавливает текущий цвет, взятый из палитры.
Общий вид:
SetColor(Color);
Color имеет тип word;
Пример:
...
SetColor(2);
...
SetColor(RED);
...




Таблица цветов.
0 - Black
1 - Blue
2 - Green
3 - Cyan - бирюзовый
4 - Red
5 - Magenta - фиолетовый
6 - Brown
7 - LightGray - светло-серый
8 - DarkGray - темно-серый
9 - LightBlue
10 - LightGreen
11 - LightCyan
12 - LightRed
13 - LightMagenta
14 - Yellow
15 - White
128 - Blink – мерцание
Функция GetColor - возвращает код текущего цвета - значение типа Word.
Пример.
...
Var I:word;
...
I:=GetColor;
...
Функция GetMaxColor - возвращает наибольший код цвета, значение типа Word, который может быть передан процедуре SetColor в качестве параметра.
Процедура SetBkColor - устанавливает цвет фона из палитры. Устанавливается для всего экрана.
Общий вид:
SetBkColor(Color);

Color - Значение типа; Word - новый цвет фона.

Пример.
SetBkColor(RED);
Или
SetBkColor(4);
Функция GetBkColor - возвращает значение типа Word - код используемого фона.
Процедура SetRGBPalette - изменяет компоненты палитры при использовании драйверов VGA и IBM 8514.
Общий вид:
SetRGBPalette(ColNum,RedVal, GreenVal, BlueVal);
ColNum - код цвета из палитры.
RedVal, GreenVal, BlueVal - определяют интенсивность соответственно красной, зеленой и синей составляющей для цвета с номером.
ColNum, ColNum,RedVal, GreenVal, BlueVal - значения типа Integer.
Для драйвера IBM 8514 ColNum может изменяться в пределах от 0 до 255, для VGA от 0 до 15.
Процедура SetFillStyle - определяет шаблон и цвет заполнения.
Общий вид:
SetFillStyle(Pattern,Color);
Pattern - шаблон заполнения, Color - цвет заполнения.




Шаблоны заполнения:
По умолчанию используются константа SolidFill и цвет с максимальным номером из текущей палитры. Шаблон и цвет, определенные процедурой SetFillStyle, применяются всеми процедурами и функциями, в которых используется операция заполнения.
Функции GetX и GetY - возвращают координаты по горизонтали (Х) и вертикали (Y) указателя текущей позиции. Координаты GetX и GetY отсчитываются от левого верхнего угла экрана (активного окна), начиная с нуля.
Пример.
...
Var x,y: integer;
...
x:=GetX;
y:=GetY;
...
Функции GetMaxX и GetMaxY - возвращают текущие значения (типа Integer) разрешения, т.е. количество точек (пикселей) по осям Х и Y, эти значения зависят от выбранного драйвера и разрешения.
Процедура MoveTo - перемещает указатель текущей позиции в точку с заданными координатами.
Общий вид:
MoveTo(x,y);
x и y - координаты точки на экране, куда будет перемещен указатель.
Пример.
...
MoveTo(10,30);
...
Процедура MoveRel - перемещает указатель на заданное расстояние, определяемое приращением координат Х и Y, относительно его текущего местоположения.
Общий вид:
MoveRel(Dx,Dy);
Пример.
Пусть указатель находится в точке (10,44).
...
MoveRel(5,8);(*переместит указатель в точку (15,52)*)
...
MoveRel(-10,-2):(*переместит указатель из тоски (15,52) в точку
(5,50)*)
...
Процедура Line - отображает прямую линию между двумя точками, координаты которых заданы в качестве параметров.
Общий вид:
Line(x1,y1,x2,y2);
x1,x2,y1,y2 имеют тип Integer.
Пример.
Var x1,x2,y1,y2: integer;
...
Line(0,0,50,67)
...
x1:=56;y1:=78;x2:=1;y2:=100;
Line(x1,y1,x2,y2);:
...
Процедура LineTo - проводит прямую от текущего положения указателя до точки заданной координатами.
Общий вид:
LineTo(X,Y);
X иY - координаты точки.
Процедура LineRel - отображает прямую от текущей позиции и до точки, координаты которой получены приращением по Х и У.
Общий вид:
LineRel(Dx,Dy);
Dx,Dy - приращения по Х и Y,имеют тип Integer.
Пример.
Пусть указатель находится в точке (45,17).
...
LineRel(40,40);
{проведет прямую из точки с координатами (45,17)}
{до точки с координатами (85,57)}
...
Функция GetPixel - возвращает значение типа Word, соответствующее цвету пикселя, координаты которого (X,Y).
Общий вид:
GetPixel(X,Y);
Пример.
...
Var I:Word;
...
I:=GetPixel(45,45);
...
Процедура PutPixel - отображает точку в заданной позиции и заданным цветом.
Общий вид:
PutPixel(x,y,color);
X,Y - координаты точки (типа Integer), Color - ее цвет (типа Word).
Пример.
...
PutPixel(23,45,4);
...
Процедура Circle - вычерчивает окружность.
Общий вид:
Circle(x,y,Rad);
X,Y - координата точки, Rad - радиус окружности в пикселях по горизонтали.
Пример:
...
Circle(45,67,50);
...
Процедура Ellipse - вычерчивает эллипс.
Общий вид:
Ellipse(X,Y,BAngle,Eangle,XRad,YRad);
X,Y - координаты центра, Bangle и Eangle - начальный и конечный углы дуги (в радианах!), XRad,Yrad - горизонтальный и вертикальных радиус эллипса.
Пример.
...
Ellipse(200,200,50,56,30,20);
...