Графические возможности языка Паскаль

Графические возможности языка Паскаль

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

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

Установка графического режима работы

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

InitGraph(var Driver, Mode:integer; Path:string),

где переменные Driver и Mode должны содержать тип графического драйвера и его режим работы. Допускается указать Driver=0 для автоматического определения данных параметров по результатам тестирования аппаратуры. Параметр Path определяет маршрут поиска файла графического адаптера.

Графические операторы языка Паскаль позволяют адресоваться к любому элементу (пикселю) графического окна и управлять светимостью этого элемента. Для указания пикселя используется следующая система координат: начало координат (0,0) располагается в левом верхнем углу экрана; горизонтальная координата X увеличивается слева направо, вертикальная координата Y увеличивается сверху вниз. При стандартном графическом адаптере VGA (в режиме 640x480) правый нижний угол экрана имеет координаты (639,479), а центр экрана - координаты (319,239).

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

Язык программирования Паскаль 7.0 поддерживает 16 основных цветов, обозначаемых соответственно номерами от 0 до 15 (см. таблицу 1).

Таблица 1 Константы цвета



Константа цвета

Цвет

Константа цвета

Цвет

0(Black)

Черный

8 (DarkGray)

Гемносерый

1 (Blue)

Синий

9 (LightBlue)

Яркосиний

2 (Green)

Зеленый

lO(LightGreen)

Яркозеленый

3 (Cyan)

Голубой

11 (LightCyan)

Яркоголубой

4 (Red)

Красный

12 (LightRed)

Розовый

5 (Magenta)

Фиолетовый

13 (LightMagenta)

Малиновый

6 (Brown)

Коричневый

14 (Yellow)

Желтый

7 (LightGray)

Светлосерый

15 (White)

Белый

Основными графическими операторами по работе с цветами являются процедуры модуля GRAPH под именами SetBkColor (служит для установки цвета фона) и SetColor (для установки цвета рисования).

Формат данных операторов следующий". SetBkColor (Color: word);





SetColor (Color: word),

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

Например, операторы SetBkColor (I); SetColor (14) позволяют установить режим рисования желтым цветом по синему фону.

Создание графических объектов

В состав модуля GRAPH входит достаточно большое количество подпрограмм, служащих для вывода на экран разнообразных графических объектов. Основными процедурами данного типа являются:

Rectangle(xl, yl, х2, y2: integer) - служит для рисования прямоугольников, задаваемых координатами двух своих противоположных углов;

Bar(xl, yl, x2, y2: integer) - служит для рисования заштрихованных прямоугольников, используя при этом текущий стиль и цвет штриховки;

SetFillStyle(Pattern, Color: word) - устанавливает образец штриховки и ее цвет, где переменная Pattern обозначает номер шаблона штриховки (см. таблицу 2), a Color - номер цвета штриховки (см. таблицу 1);

Circle(x, у: integer; r: word) - рисует окружность радиуса г с центром в точке (х, у); Line(xl, yl, x2, y2: integer) - рисует линию от точки (xl, yl) до точки (х2, у2);

PieSHce(x, у: integer; StAngle, EndAngle, nword) - рисует и заштриховывает сектор окружности радиусом г с центром в (х, у) от начального угла StAngle к конечному углу EndAngle. При этом используется текущий стиль и цвет штриховки (см. процедуру SetFillStyle);

PutPixel(x, у: integer; Color:word) - выводит на экран точку цвета Color с координатами (х, у);

OutTextXY(x, y:integer; TextString:string) — выводит техт TextString в заданное координатами (х, у) место экрана.

Таблица 2 Шаблоны штриховки



Номер

Стиль штриховки

Номер

Стиль штриховки

0

Нет штриховки

6

Наклонная влево

1

Сплошная (заливка)

7

В клетку по образцу +++

2

Горизонтальными линиями

8

В клетку по образцу ххх

3

Наклонная вправо

9

Штриховка в мелкую клетку

4

Наклонная вправо толстыми линиями

10

Редкими точками

5

Наклонная влево толстыми линиями

11

Частыми точками

Стандартный режим работы в среде Турбо Паскаля - текстовый. В этом режиме на экран выводятся только известные компьютеру символы.

В графическом режиме экран дисплея можно рассматривать как совокупность близко расположенных точек. Точку экрана называют пиксель или пиксел (pixel). Светимость этих точек может регулироваться программой. Пикселы образуют прямоугольную таблицу - растр с нумерацией элементов относительно левого верхнего угла экрана - точки с координатами (0; 0).

Для представления символов текстовой информации используется матрица с фиксированным количеством пикселов. Знакоместо каждого символа - прямоугольник размером, к примеру, 8x8, 8x14, 8x16 и т.д.; - в знакоместо при помощи программы помещается растровое изображение символа.

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



800x600 точек, 1024x768 точек и более. Чем выше разрешающая способность монитора, тем качественнее изображение. Многие видеоадаптеры могут работать с несколькими графическими страницами.

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

Драйвер - это программа, управляющая определенным устройством ПК. Графический драйвер управляет дисплейным адаптером в графическом режиме. Графические драйверы обычно располагаются на диске в подкаталоге BGI рабочего каталога в виде файлов с расширением .BG1 (Borland Graphic Interface).

В ТП 7.0 есть стандартный библиотечный модуль Graph - библиотека подпрограмм, обеспечивающих управление графическими режимами видеоадаптеров: CGA, EGA, VGA, MCGA, Hercules, PC 3270, AT&T 6300, IBM 8514.

Библиотека Graph содержит около 80 графических процедур и функций, а также десятки констант и описаний типов данных [6, 7]. Подключение модуля происходит при помощи зарезервированного слова USES (uses Graph;).

Модуль Graph - файл GRAPH.TPU. Для работы с графикой этот файл должен быть доступным для компилятора, т.к. GRAPH.TPU не входит в состав библиотеки TURBO.TPL. В поле UNIT опции DIRECTORIES / OPTIONS главного меню среды Турбо Паскаля следует указать каталог, в котором размещен файл GRAPH.TPU.

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

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

Процедуры и функции из библиотеки Graph

Обращение Действие

InitGraph (Driver, Mode, F) Инициирует графический режим работы адаптера

CloseGraph Завершает работу адаптера в графическом режиме

RestoreCrtMode Служит для кратковременного возврата в текстовый режим

ClearDevice Очищает экран, закрашивает его в цвет фона

ClearViewPort Очищает графическое окно

SetGraphMode(Mode) Устанавливает новый графический режим работы адаптера; значения Mode - в конце

главы

SetViewPort(Xl, Yl, X2, Y2, Т) Устанавливает прямоугольное окно на экране: X1,Y1 - координаты левого

верхнего, Х2, Y2 - координаты правого нижнего углов окна, Т - выражение типа Boolean, определяющее

"отсечку" не умещающихся в окне элементов изображения (True - "отсекать")

SetPalette(Reg, Col) Формирует новое значение Col в регистре с номером Reg (установка одного цвета

палитры)

SetAllPalette(Palette) Производит смену кодов цветности во всех регистрах палитры

SetBkColor (Color) Устанавливает цвет фона (целое число от 0 до 15)

SetColor (Color) Устанавливает цвет для выводимых символов и линий, Color - выражение типа Word

PutPixel (X, Y, Color) Выводит точку с координатами X, Y цветом Color

Line (XI, Yl, X2, Y2) Рисует отрезок линии по коордимнатам его концов

LineRel (Xh, Yh) Вычерчивает линию от текущего положения указателя до положения, заданного

приращениями его координат Xh и Yh (выражения типа Integer)

LineTo (X, Y)

Вычерчивает линию от текущего положения указателя до положения, заданного его новыми координатами

MoveRel (DX, DY) Устанавливает новое положение указателя в координатах относительно предыдущего

MoveTo (X, Y) Устанавливает новое положение указателя

OutText (Т) Выводит текст Т (кроме кириллицы), начиная с текущего положения указателя

OutTextXY (X, Y, Т) Выводит текст Т, начиная с позиции X строки Y

Circle (X, Y, R) Рисует окружность радиуса R типа Word с центром в точке с координатами (X; Y)

Ваг (XI, Y1, Х2, Y2) Заполняет прямоугольную область экрана, заданную координатами диагонали







Bar3D (XI, Yl, X2, Y2, D, Top) Чертит трехмерное изображение параллелепипеда (D -глубина) и

закрашивает его переднюю грань; Тор - выражение типа Boolean, если Тор = True, верхняя грань

вычерчивается, если False - нет

Rectangle (XI, Yl, X2, Y2) Вычерчивает прямоугольник по координатам левого верхнего и правого нижнего

углов

Arc (X, Y, А, В, R) Чертит дугу окружности: X, Y - координаты центра, А, В - начальный и конечный углы

дуги(в градусах), отсчет углов ведется против часовой стрелки^ - радиус (в пикселах);

Ellipse (X, Y, А, В, RX, RY) Чертит эллипсную дугу: X, Y - координаты центра, А, В - начальный и

конечный углы дуги (в градусах), RX, RY - горизонтальный и вертикальный радиусы

Sector (X, Y, А, В, RX, RY) Рисует и штрихует сектор эллипса радиусами RX и RY с центром в точке X, Y от

угла А к углу В

SetFillStyle (Pattern, Color) Устанавливает образец штриховки и цвет

SetLineStyle (LineStile,Pattern,Thickness) Устанавливает толщину и стиль линии

SetTextStyle (Font, Direction,CharSize) Устанавливает текущий шрифт (0-9), направление (по горизонтали-

0/вертикали-1) и размер символов (0-13)

FillEllipse (X, Y, RX, RY) Рисует закрашенный эллипс

FloodFill (X, Y, С) Заполняет любую замкнутую фигуру, используя текущий стиль заполнения (узор и цвет),

X, Y - координаты точки внутри этой области, С - цвет границы

FillPoly (N, Coords) Обводит линией и закрашивает замкнутый многоугольник; N - количество вершин,

Coords - переменная типа PointType, содержащая координаты вершин (см. сноску под таблицей)

Getlmage (X1,Y1, X2,Y2, Bui) Помещает в буфер памяти Buf копию прямоугольного фрагмента

изображения

Putlmage (X,Y, Buf, ModePut) Выводит в заданное место экрана (X,Y - координаты верхнего левого угла)

копию фрагмента изображения из буфера Buf, ModePut - способ копирования (в конце главы)

ImageSize (X1,Y1,X2,Y2) Возвращает размер памяти в байтах, необходимый для размещения

прямоугольного фрагмента изображения

GraphResult Возвращает 0, если последняя графическая операция выполнилась без ошибок

GraphErrorMsg (Code) Возвращает значение типа String с текстовым сообщением об ошибке; Code - код

ошибки

GetGraphMode Возвращает значение типа Integer, в котором содержится код текущего режима работы

графического адаптера

GetX Возвращает текущую координату указателя по горизонтали / вертикали (тип Integer)

GetY

GetMaxX Возвращает максимальную координату экрана по горизонтали / вертикали (тип Word ) в текущем

режиме работы