меню следующее занятие

.:: Занятие I ::.

Тема:

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

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

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

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

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

InitGraph(GraphDriver, GraphMode, Path);

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

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

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

CGA EGA EGAMono HercMono VGA

MCGA EGA64 IBM8514 ATT400 PC3270

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. Установить графический режим с помощью двух переменных:

Program G;
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. Напишите программу, рисующую эту фигуру, по вашему рисунку.
меню следующее занятие
Яндекс цитирования Rambler's Top100
Сайт создан в системе uCoz