Работой видеоадаптера управляет специальная программа, которая называется драйвером. Драйвер хранится в отдельном файле на диске и содержит как исполняемый код, так и необходимые ему для работы данные. Признак файла с драйвером – расширение .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 Установка цвета линии, типа линии и закраски
При работе с цветными изображениями большое значение имеет набор цветов, доступных программисту. Количество доступных для воспроизведения цветов определяется возможностями аппаратуры, то есть дисплея и видеоадаптера, а также видеорежимом. В программировании обычно используется схема цветового представления, в которой считается, что каждый цвет является смесью трех основных цветов: красного 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.
Функция: Устанавливает текущую толщину и тип линии.