Смекни!
smekni.com

Графика Турбо-Паскаля. Динамические изображения (стр. 2 из 5)

Работой видеоадаптера управляет специальная программа, которая называется драйвером. Драйвер хранится в отдельном файле на диске и содержит как исполняемый код, так и необходимые ему для работы данные. Признак файла с драйвером – расширение .bgi имени файла. Имя файла с драйвером соответствует типу видеоадаптера вашего компьютера.

Переключение в графический режим и работа в нем реализованы в Турбо Паскале в виде набора процедур, находящихся в специальном модуле graph.tpu. Работа этого модуля основана на использовании так называемого графического интерфейса Борланд (BGI – BorlandGraphicsInterface), специализированной графической библиотеки. Основное достоинство этого интерфейса заключается в том, что он прост в изучении и вполне подходит для программирования несложных графических программ.

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

Модуль Graph должен явно подключаться к программе с помощью оператора использования Uses, записываемого после заголовка программы:

ProgramGrafics;

UsesGraph;

Программа при переключении в графический режим должна определить тип видеоадаптера. Это можно сделать, явно указав в программе тип видеоадаптера или дав программе возможность самостоятельно определить значение соответствующих параметров. Для этого необходимо ввести переменную целого типа, ее идентификатор можно обозначить d. При явном определении видеоадаптера в программе должен присутствовать оператор присваивания: d:=value;

где value – это любое некоторое число (таблица 1), либо встроенная константа (встроенные константы не надо описывать специально, так как их описания содержатся в модулях).

Некоторые возможные значения value приведены в таблице1.

Таблица1 – Тип видеоадаптера

Константа Значение

CGA

MCGA

EGA

EGA64

EGAMono

HercMono

AT&T400

VGA

PC3270

1

2

3

4

5

7

8

9

10

При автоматическом распознавании видеоадаптера в правой части оператора присваивания используется константа Detect (или нулевое значение).

d:=Detect; d:=0.

Второе, что должна сделать программа – задать определенный графический режим. Большинство видеоадаптеров могут работать в нескольких графических режимах. Эти режимы различаются прежде всего разрешением и набором доступных цветов. Для этого следует ввести еще одну переменную целого типа, назовем ее tили GraphMode. Некоторые допустимые значения приведены в таблице:

Таблица 2 – Графические режимы

Константа Значение Описание графического режима
EGALo 0 640x200, 16 цветов, 4страницы
EGAHi 1 640x350,16 цветов, 2 страницы
EGA64Lo 0 640x200, 16 цветов, 1 страница
EGA64Hi 1 640x350, 4 цвета, 1 страница
VGALo 0 640x200, 16 цветов, 4 страницы
VGAMed 1 640x350, 16 цветов, 2 страницы
VGAHi 2 640х480, 16 цветов, 1 страница
VGAHi2 3 640х480, 2 цвета, 1 страница

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

Переключение в графический режим работы дисплея выполняется вызовом процедуры InitGraph из модуля Graph.

Описание:

InitGraph(vard, t, ‘’);

Первый параметр в этой процедуре задает тип видеоадаптера, второй определяет режим. И параметр d, и параметр t являются параметрами-переменными (var). Параметр ‘’ определяет путь доступа к каталогу (маршрут), в котором находятся графические драйверы. Если этот параметр пуст, то подразумевается, что файлы драйверов содержатся в текущем каталоге.

Процедура InitGraph инициализирует графическую систему и переводит аппаратуру в графический режим.

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

Описание:

GraphResult Тип результата: Целый (Integer).

Определены следующие коды ошибок:

- 1 графика не установлена (используйте процедуру InitGraph);

- 2 графическая аппаратура не найдена;

- 3 драйвер графического устройства не найден;

- 4 неверный файл драйвера графического устройства;

- 5 не хватает памяти для загрузки драйвера;

- 6 выход за границы при просмотре области закраски;

- 7 выход за границы памяти при закрашивании;

- 8 файл шрифта не найден;

- 9 не хватает памяти для загрузки шрифта;

- 10 недопустимый графический режим для выбранного драйвера.

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

1.3 Процедуры и функции

1.3.1 Установка цвета линии, типа линии и закраски

При работе с цветными изображениями большое значение имеет набор цветов, доступных программисту. Количество доступных для воспроизведения цветов определяется возможностями аппаратуры, то есть дисплея и видеоадаптера, а также видеорежимом. В программировании обычно используется схема цветового представления, в которой считается, что каждый цвет является смесью трех основных цветов: красного Red), зеленого (Green) и синего (Blue), а оттенок определяется интенсивностью компонентов. Эта схема называется RGB-представлением. Использование RGB-представления связано с конструктивными особенностями электронно-лучевой трубки, в которой каждая графическая точка состоит из трех компонентов: красного, зеленого, синего. При инициализации видеорежима компьютер создает цветовую палитру, которую можно считать таблицей, где каждому цвету сопоставлен свой номер.

При работе с цветом в режиме VGA интенсивность основного цвета задается значением типа Word. Шестнадцатицветная палитра VGA приведена в таблице (в процедурах можно использовать как константы цветов, так и их коды):

Таблица 3 – Коды цветов

Цвет Константа Код
ЧерныйСинийЗеленыйБирюзовыйКрасныйМалиновыйКоричневыйСветло-серыйТемно-серыйСветло-синийСветло-зеленыйСветло-бирюзовыйСветло-красныйСветло-малиновыйЖелтыйБелый BlackBlueGreenCyanRedMagentaBrownLightGrayDarkGrayLightBlueLightGreenLightCyanLightRedLightMagentaYellowWhite

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Процедура SetColor.

Используя палитру устанавливает текущий цвет линий.

Описание: SetColor (цвет: Word)

Цвета линий могут принимать значения в диапазоне от 0 до 15 в зависимости от используемого графического драйвера и графического режима.

Процедура SetBkColor.

Используя палитру устанавливает текущий фоновый цвет.

Описание: SetBkColor (цвет: Word)

Цвет фона может принимать значение в диапазоне от 0 до 15 (смотрите таблицу цветов).

Процедура SetFillStyle.

Данная процедура устанавливает тип (стиль) закраски и ее цвет.

Описание:SetFillStyle(стиль: Word; цвет: Word;)

В Турбо Паскале имеется 12 стилей заполнения:

- EmptyFill (0) – сплошное заполнение цветом фона;

- SolidFill (1) – сплошное заполнение заданным цветом;

- LineFill (2) – заполнение горизонтальными линиями;

- LtSlashFill (3) – диагональное заполнение;

- SlashFill (4) – диагональное заполнение толстыми линиями;

- BkSlashFill (5) – обратное диагональное заполнение толстыми линиями;

- LtBkSlashFill (6) – обратное диагональное заполнение;

- HatchFill (7) – клетчатое заполнение;

- XHatchFill (8) – косое клетчатое заполнение;

- InterLeaveFill (9) – чередующееся линейное заполнение;

- WideDotFill (10) – редко расположенные точки;

- CloseDotFill (11) – часто расположенные точки;

- UserFill (12) – стиль определен пользователем.

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

Процедура SetLineStyle.

Функция: Устанавливает текущую толщину и тип линии.