
2. Теоретические сведения
Модуль Graph представляет собой библиотеку из более чем 50 графических процедур и функций. В модуле поддерживаются несколько типов линий и стилей заполнения, существует несколько типов шрифтов, которые можно увеличивать, выравнивать и ориентировать вертикально или горизонтально. Для того чтобы выполнить программу, которая использует модуль Graph, необходимо иметь доступ к одному или более графических драйверов (файлы с расширением BGI), файлам TURBO.TPL, GRAPH.TPU и к файлам шрифтов с расширением CHR. Каждый драйвер содержит код и данные, хранящиеся в отдельном файле.
Во время выполнения, процедура InitGraph определяет графическое устройство, загружает и инициализирует соответствующий графический драйвер, переводит систему в графический режим и возвращает управление вызывающей программе.
Процедура Close Graph выгружает драйвер из памяти и восстанавливает предыдущий видеорежим.
Рассмотрим используемую в графическом режиме координатную систему.
Верхний левый угол графического экрана определен как (0,0). Значение Х или колонки увеличиваются направо. Значение Y или строки увеличиваются вниз. Так в режиме 640x480 на адаптере CGA экранные координаты каждого из четырех углов и точка в центре экрана будут представлены:
Для вывода графической информации в заданную позицию в Turbo Pascal
используется текущий указатель (CP - Current Pointer). CP подобен курсору в
текстовом режиме, но в отличие от курсора CP не виден. Следующие процедуры
перемещают CP: InitGraph, MoveTo, MoveRel, LineTo, LineRel, OutText,
SetGraphMode, GraphDefaults, ClearDevice, SetViewPort, ClearViewPort.
Причем последние 5 команд перемещают CP в позицию (0,0).
Графический модуль Turbo Pascal позволяет использовать большое число
процедур для рисования различных геометрических фигур: точек, линий,
окружностей, дуг, эллипсов, прямоугольников, многоугольников и т.д. Все
графические процедуры и функции с кратким описанием приведены ниже.
Процедуры модуля Graph |
|
Arc |
Рисует дугу от начального угла к конечному, используя (X,Y) как центр |
Bar |
Рисует полосу, используя текущий стиль и цвет. |
Bar3D |
Рисует 3-х мерную полосу, используя текущий стиль и цвет. |
Circle |
Рисует окружность, используя (X,Y) как центр. |
ClearDevice |
Очищает экран и устанавливает текущий указатель (CP) в начало. |
ClearViewPort |
Очищает окно. |
CloseGraph |
Закрывает графическую систему. |
DetectGraph |
Проверяет аппаратуру и определяет какой графический драйвер и в каком режиме используется. |
DrawPoly |
Рисует многоугольник текущим цветом и типом линии. |
Ellipse |
Рисует эллиптическую дугу от начального угла к конечному, используя (X,Y) как центр. |
FillEllipse |
Рисует заполненный эллипс, используя (X,Y) как центр и XRadius и YRadius как горизонтальные и вертикальные оси. |
FillPoly |
Заполняет многоугольник, используя сканирование. |
FloodFill |
Заполняет ограниченную область, используя текущий шаблон и цвет заполнения. |
GetArcCoords |
Позволяет запросить координаты команды Arc. |
GetAspectRatio |
Возвращает разрешение экрана из которого может быть вычислен относительный аспект (Xasp/Yasp). |
GetFillPattern |
Возвращает шаблон заполнения, установленный последним вызовом SetFillPattern. |
GetFillSettings |
Позволяет запросить текущий шаблон и цвет, установленные SetFillStyle или SetFillPattern. |
GetImage |
Сохраняет битовый образ указанной части экрана в буфере. |
GetLineSettings |
Возвращает текущие стиль, шаблон и толщину линии, установленные SetLineStyle. |
GetModeRange |
Возвращает минимальный и максимальный графические режимы для данного драйвера. |
GetPalette |
Возвращает текущую палитру и ее размер. |
GetTextSettings |
Возвращает текущий шрифт, направление, размер и выравнивание текста, установленные SetTextStyle и SetTextJustify. |
GetViewSettings |
Позволяет запросить текущие параметры окна и отсечения. |
GraphDefaults |
Устанавливает текущий указатель (CP) в начало и переустанавливает графическую систему. |
InitGraph |
Инициализирует графическую систему и устанавливает устройство в графический режим. |
Line |
Рисует линию от (X1,Y1) к (X2,Y2). |
LineRel |
Рисует линию от текущего указателя (CP) к точке, лежащей на заданном растоянии. |
LineTo |
Рисует линию от текущего указателя к (X,Y). |
MoveRel |
Передвигает текущий указатель (CP) на заданное расстояние от его текущей позиции. |
MoveTo |
Передвигает текущий указатель (CP) в (X,Y). |
OutText |
Выводит текст на экран от текущего указателя. |
OutTextXY |
Выводит текст на экран. |
PieSlice |
Рисует и заполняет сектор, используя (X,Y) как центр и рисуя от начального угла к конечному. |
PutImage |
Выводит битовый образ на экран. |
PutPixel |
Рисует точку (пиксел) в (X,Y). |
Rectangle |
Рисует прямоугольник, используя текущий цвет и тип линии. |
RestoreCRTMode |
Восстанавливает видеорежим, который был до инициализации графики. |
Sector |
Рисует и заполняет сектор эллипса. |
SetActivePage |
Устанавливает активную страницу для графического вывода. |
SetAllPalette |
Изменяет цвет палитры. |
SetAspectRatio |
Изменяет значение относительного аспекта. |
SetBkColor |
Устанавливает цвет фона. |
SetColor |
Устанавливает основной цвет, которым будет осуществляться рисование. |
SetFillPattern |
Выбирает шаблон заполнения, определенный пользователем. |
SetFillStyle |
Устанавливает шаблон заполнения и цвет. |
SetGraphBufSize |
Позволяет изменить размер буфера для функций заполнения. |
SetGraphMode |
Переводит систему в графический режим и очищает экран. |
SetLineStyle |
Устанавливает текущие толщину и стиль линии. |
SetPalette |
Изменяет один цвет палитры, указанный через ColorNum и Color. |
SetRGBPallete |
Позволяет модифицизовать палитру для IBM 8514 и VGA. |
SetTextJustify |
Устанавливает выравнивание текста, используемое OutText и OutTextXY. |
SetTextStyle |
Устанавливает текущий шрифт, стиль и размер текста. |
SetUserCharSize |
Позволяет изменить ширину и высоту символа для штрихового шрифта. |
SetViewPort |
Устанавливает текущее окно для графического вывода. |
SetVisualPage |
Устанавливает номер видимой графической страницы. |
SetWriteMode |
Устанавливает режим вывода (копирование или XOR) для линий, рисуемых с DrawPoly, Line, LineRel, LineTo, Rectangle. |
Функции модуля Graph. |
|
GetBkColor |
Возвращает текущий фоновый цвет. |
GetColor |
Возвращает текущий цвет. |
GetDefaultPalette |
Возвращает аппаратную палитру в записи PaletteType. |
GetDriverName |
Вoзвращает строку с именем текущего драйвера. |
GetGraphMode |
Возвращает текущий графический режим. |
SetMaxColor |
Возвращает максимальный цвет, который можно задать в SetColor. |
GetMaxMode |
Возвращает номер максимального режима текущего загруженного драйвера. |
GetMaxX |
Возврашает максимальный Х (разрешение по горизонтали) для текущего графического драйвера и режима. |
GetMaxY |
Возвращает максимальный Y (разрешение по вертикали) для текущего графического драйвера и режима. |
GetModeName |
Возвращает строку с именем указанного графического режима. |
GetPaletteSize |
Возвращает размер таблицы палитры. |
GetPixel |
Возвращает цвет точки в (X,Y). |
GetX |
Возвращает координату X текущей позиции (CP). |
GetY |
Возвращает координату Y текущей позиции (СР). |
GraphErrorMsg |
Возвращает строку сообщения об ошибке для заданного кода ErrorCode. |
GraphResult |
Возвращает код ошибки для последней графической операции. |
ImageSize |
Возвращает число байт, требуемое для заполнения прямоугольной области экрана. |
InstallUserDriver |
Устанавливает пользовательский драйвер устройства в BGI таблицу драйверов устройств. |
InstallUserFont |
Устанавливает новый шрифт, который не встроен в BGI систему. |
RegisterBGIdriver |
Регистрирует драйвер BGI для графической системы. |
RegisterBGIfont |
Регистрирует шрифт BGI для графической системы. |
TextHeight |
Возвращает высоту строки в пикселах. |
TextWidth |
Возвращает ширину строки в пикселах. |
Рассмотрим пример программы:
program GraphText;
uses
Graph;
var
GraphDriver,
GraphMode,
ErrorCode : Integer;
begin
{Автоматическое определение драйвера}
GraphDriver :=Detect;
{Последний параметр InitGraph указывает путь к драйверам}
InitGraph(GraphDriver, GraphMode, 'C:\DRIVERS');
ErrorCode :=GraphResult;
if ErrorCode <> grOK then {ошибка }
begin
Writeln('Graphics error: ', GraphErrorMsg(ErrorCode));
Writeln('Program aborted...');
Halt(1);
end;
Rectangle(0, 0, GetMaxX, GetMaxY); {рисовать прямоугольник на весь экран}
OutTextXY(GetMaxX div 2, GetMaxY div 2,
'Borland Graphics interface (BGI)');
Readln;
CloseGraph;
end. {GraphTest}
Программа начинается с вызова InitGraph, который автоматически определяет тип адаптера и загружает соответствующий графический драйвер. ВНИМАНИЕ: на разных компьютерах этот путь различается, поэтому в программе пишите СВОЙ путь. Если графическое устройство не распознано или во время инициализации произошла ошибка, выдается сообщение об ошибке и программа завершается. Иначе, чертится прямоугольник по краю экрана и в центре экрана выводится текст.
3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания (см. Приложение 1).
4.ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы.
5.КОНТРОЛЬНЫЕ ВОПРОСЫ
1) Что такое текущий указатель?
2) Какой вид имеет система координат в графическом режиме?
3) Следует ли указывать в директиве USES модуль GRAPH?
4) Какие действия производят процедуры InitGraph и CloseGraph?
5) Написать программу, которая в центре красного экрана пользователя рисует окружность, залитую желтым цветом.
6. ВАРИАНТЫ ЗАДАНИЙ
№ задания |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
№ по журналу |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
С помощью процедур и функций модуля GRAPH на экране изобразить декартовую систему координат (по осям расставить цифровые значения) и построить графики:
1) x=3t
(1+t3),
y=3t2
(1+t3)
при -1<t
5;
2) x=t2/(1+t2), y=t3/(1+t2) при -10 t 10;
3) x=(t2-1)/(1+t2), y=t(t2-1)/(1+t2) при -10 t 10;
4) x=cos2
t+cost,
y=cost sint+sint при
0
t<2
;
5) x=cost (1+cost), y=sint (1+cost) при 0 t<2 ;
6) x=t-sint, y=1-cost при 0 t<2 ;
7) x=sint, y=t2-cost при 0 t<2 ;
8) x=t2*sint, y=t2-cost при - t. ;
9) x=sint, y=cost при - t ;
10) x=cos2t, y=sin2t при 0 t 2 .
Лабораторная работа N25.
СТРУКТУРА МОДУЛЕЙ И ОСОБЕННОСТИ РАБОТЫ С НИМИ.
1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ
Целью работы является изучение общей структуры модулей.