Pascaler
О проекте Теоретический материал Тестирование Архив задач
Войти в личный кабинет



О проекте


Преподавателям


Тема: Графический режим. Инициализация графического режима. Построение точки, линии.

Стандартное состояние компьютера после запуска Турбо Паскаля - текстовый режим. Для того, чтобы использовать его графические средства, программист должен "определенным образом инициировать режим работы дисплейного адаптера". В графическом режиме работой дисплейного адаптера управляет графический драйвер.

Драйвер - это специальная программа, которая управляет техническими средствами компьютера. Для всех существующих типов адаптеров фирма Borland разработала графические драйверы (они имеют расширение .bgi и находятся на диске в одноименном подкаталоге).

Необходимые процедуры и функции для работы с графикой собраны стандартном модуле - Graph.

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

InitGraph(GraphDriver, GraphMode, Path);

где переменные GraphDriver и GraphMode имеют тип Integer, а переменная Path имеет тип String.

То, что записано в скобках, называется параметрами вызова процедуры (подробнее с данным вопросом мы ознакомимся позднее в теме “Процедуры и функции”), а сейчас рассмотрим параметры GraphDriver, GraphMode и Path.

GraphDriver - целая переменная, определяющая тип драйвера. Процедура загружает драйвер в оперативную память и переводит адаптер в графический режим работы. Тип драйвера должен соответствовать типу графического адаптера. Для указания типа драйвера в модуле предопределены следующие константы:

CGAEGAEGAMonoHercMonoVGA
MCGAEGA64IBM8514ATT400PC3270

Detect = 0;

Целая переменная GraphMode задает режим работы графического адаптера. Многие адаптеры могут работать в нескольких режимах. Например, переменная GraphMode в момент обращения к InitGraph может иметь одно из следующих значений для адаптера VGA:

VGALo = 0; VGAMed = 1; VGAHi = 2;

Примечание: Более подробно о переменной Mode можно узнать в справочном руководстве по TurboPascal.

Теперь представьте такой вариант: Вам нужно написать программу на языке Pascal с использованием графических возможностей компьютера. Хорошо, если это - программа для компьютера с известным адаптером. А если нет, как действовать в этом случае? Выход один. Если нам неизвестен тип адаптера или программа должна работать с любым адаптером, необходимо обращаться к InitGraph с запросом на автоматическое определение драйвера.

Это происходит следующим образом: переменной GraphDriver присваиваем значение detect. В этом случае компьютер сам определит необходимый драйвер и подберет наилучший режим.

Program Primer1;
Uses
  Graph;{Подключение модуля библиотеки графических процедур}
Var
  GraphDriver,
  GraphMode : integer;
Begin
  GraphDriver := detect; {автоопределение типа драйвера }
  InitGraph(GraphDriver, GraphMode, Path);
  {Инициализация графического режима}
  . . .
  . . .
  . . .
  СloseGraph;{Закрытие графического режима}
End.

Для получения графического изображения нужно заставить светиться заданным цветом определенную группу пикселей (точек). Это можно делать в программе, но ваша работа тогда станет очень трудоёмкой. Чтобы облегчить труд программиста существует модуль Graph, в котором содержиться 79 полезных процедур и функций, десятки стандартных констант и типов данных (например, процедуры рисования линии, окружности и др.). Чтобы воспользоваться этим модулем нужно сначала его подключить. Для этого в программе записывают строчку: Uses Graph.

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

1) Инициализация графики, подготовительные работы, управление цветом, закрытие режима:

 InitGraph установление (инициализация) графического режима работы
 CloseGraph завершение работы с графикой
 DetectGraph определение драйвера
 FloodFill заливка замкнутого контура выбранным типом и цветом палитры
 RestoreCRTMode  возврат в текстовый режим
 SetBkColor выбор и установка нового цвета закраски фона
 SetColor выбор и установка нового текущего цвета
 SetFillStyle выбор и установка нового шаблона и цвета заполнения

2) Процедуры и функции для управления курсором и видеостраницами:

 ClearDevice очистка текущего устройства вывода
 ClearViewPort очистка текущего окна
 GetMaxX получение максимально доступной координаты по оси X
 GetMaxY получение максимально доступной координаты по оси Y
 GetPixel получение текущего цвета точки экрана
 GetX получить значение координаты X
 GetY получить значение координаты Y
 MoveRel переместить курсор из данной текущей точки на заданное приращение.
 MoveTo переместить курсор из данной текущей точки в заданную точку

3). Процедуры и функции для работы с "графическими примитивами":

 Arc Рисует дугу
 Bar Рисует полосу
 Bar3D Рисует трехмерную полосу
 Circle Рисует окружность
 DrawPoly Рисует многоугольник
 Ellipse Рисует эллиптическую дугу или эллипс
 FillEllipse Рисует заполненный эллипс
 FillPoly Заполняет многоугольник
 Line, LineRel, LineTo Рисует линию
 Rectangle Рисует прямоугольник
 Sector Рисует сектор эллипса
 PutPixel Рисует точку

4) Процедуры для работы с текстом

 OutText Вывод текста
 OutTextXY Вывод текста

Итак, для запуска графической системы нам необходимо:

1. Подключить модуль GRAPH - библиотеку графических процедур:

Uses Graph;

2. Установить графический режим с помощью двух переменных:

Var
  GraphDriver, GraphMode: integer;
Begin
  GraphDriver:=detect;
  InitGraph(GraphDriver, GraphMode, '..BGI');
  {С этого момента все графические средства доступны пользователю}
  { тело программы }
  CloseGraph;
End.

Задание. Наберите шаблон для программы, работающей в графическом режиме. Нам он понадобиться в дальнейшем.

Внимание! Прежде чем запустить программу на выполнение, необходимо на компьютере установить маршрут поиска файлов каталога BGI. Для этого выполните следующее:

F10 - Options - Directories
В окне EXE&TPU directory набрать ..BGI
Клавишей TAB перейти к окну Unit directories и набрать ..BGI
Клавишей TAB перейти к ОК и нажать Enter.

Система координат в графическом режиме.

Любая информация при работе в графическом режиме на экране монитора представлена совокупностью светящихся точек - пикселей, которые определяются цветом и координатами - положением относительно левого верхнего угла экрана с координатами (0,0).

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

Чтобы узнать максимальные координаты экрана в текущем режиме работы, воспользуемся стандартными функциями GetMaxX и GetMaxY. Для этого наберите небольшую программу:

Uses Graph;
Var
  GraphDriver, GraphMode: integer;
Begin
  GraphDriver:=detect;
  InitGraph(GraphDriver, GraphMode, ‘..BGI’);
  Writeln(GetMaxX, 'x', GetMaxY);
  Readln;
  CloseGraph;
End.

Примечание. Для нашего графического режима обычно значение максимальной координаты X равно 640 пикселям, а Y- 480 пикселям.

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

Итак, отсчет начинается с верхнего левого угла с координатами (0;0), значение Х - столбец, отсчет слева направо; значение Y - строка, отсчет сверху вниз.

Чтобы строить изображение, нужно указать точку начала вывода. В графическом режиме нет видимого курсора, но есть так называемый невидимый текущий указатель (Current Pointer). После инициализации графического режима указатель стоит в точке (0;0). Чтобы переместить его в нужное место используют следующие процедуры:

MoveTo (X, Y), где переменные X, Y типа Integer - перемещает текущий указатель в точку с координатами (X,Y).

Например, MoveTo (200, 100)

MoveRel (dX, dY), где переменные dX, dY типа Integer - перемещает текущий указатель по горизонтали на расстояние, равное dX пикселям, а по вертикали на расстояние, равное dY пикселям. (Relation (англ.) - относительно)

Например, если после выполнения предыдущей процедуры текущий указатель находится в точке (200, 100), то после выполнения процедуры MoveRel (25, 150) он будет находится в точке с координатами (225, 250).

PutPixel(X, Y, Color), где переменные X, Y типа Integer, а Color типа Word - процедура выводит точку заданного цвета Color в точку с координатами (X, Y).

Задание. Наберите в теле программы следующие процедуры PutPixel(300, 150, Red), PutPixel(45, 420, 9) и просмотрите их действие.

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

 Цвет Цвет Код
 Black черный 0
 Blue синий 1
 Green зеленый 2
 Cyan бирюзовый 3
 Red красный 4
 Magenta малиновый 5
 Brown коричневый 6
 LightGray светло-серый 7
 DarkGray темно-серый 8
 LightBlue ярко-голубой 9
 LightGreen ярко-зеленый 10
 LightCyan ярко-бирюзовый 11
 LightRed ярко-красный 12
 LightMagenta ярко-малиновый 13
 Yellow желтый 14
 White белый 15

Line (X1, Y1, X2, Y2), где переменные X1, Y1, X2, Y2 типа Integer - рисуется линия от точки (X1, Y1) до точки (X2, Y2).

LineTo (X, Y), где переменные X, Y типа Integer - рисуется линия из точки, где находится в данный момент курсор в точку (X, Y).

LineRel (dX,dY), где переменные dX, dY типа Integer - рисуется линия из точки, где находится в данный момент курсор (X, Y) в точку (X+dX,Y+dY).

Задание. Придумайте самостоятельно примеры с использованием всех процедур вычерчивания линий.

У Вас не получается нарисовать линии? В чем же причина? Если внимательно посмотреть на эти процедуры и сравнить их с процедурой PutPixel, то можно заметить, что в них нет параметра, указывающего цвет рисования линии. В этом и других аналогичных случаях цвет задается специальной процедурой.

SetColor (Color), где переменная Color типа Word - устанавливает текущий цвет для выводимых линий и символов.

Задания:

  1. Исправьте свою программу так, чтобы процедуры рисовали линии различных цветов.


  2. В начерченной ранее системе координат изобразите на чертеже точки: А(150,450), В(100,350), С(350,350), D(300,450), E(200,350), F(200,50), L(250,40), K(200,20), M(300,250), X(175,400), Y(225,400), Z(275,400).


  3. Соедините точки, получая отрезки: AB, BC, CD, AD, EK, KL, LF, FM, ME. Какая фигура у Вас получилась?


  4. Напишите программу, рисующую эту фигуру, по вашему рисунку.

Внимание! Следите за порядком на дискете. Организуйте каталог A:GRAPHIKA, где будут находиться файлы всех Ваших программ изучаемой темы.

Вернуться назад
2003—2012 © Группа «Vimedia»
Проект «Pascaler» — лучший на ХI Всероссийской конференции молодых исследователей с международным участием «Шаг в будущее», Россия, Москва, 12 – 16 апреля 2004г.