Работа в графическом видеорежиме. Общий обзор

Работа и графическом режиме выполняется с помощью предопределенных констант, типов, процедур и функций стандартного модуля Graph (файл Graph.tpu). В этом режиме любое изображение на экране дисплея Синтезируется их множества мельчайших элементов, называемых пикселами (пэлами — picture element). Каждый пиксель представляет собой светящуюся точку таких размеров, при которых промежутки между соседними пикселами отсутствуют. Если группа Снежных пикселов светится, то они воспринимаются не как совокупность отдельных точек, а как сплошной участок.

 В графическом режиме можно управлять цветом отдельных пикселов экрана. Из цветных точек составляются линии, фигуры и целые графические объекты. Таким образом на экране дисплея может быть создано любое графическое изображение. Каждый пиксель имеет свои координаты. В графическом режиме Pascal принята система координат, которая представлена на рисунке:

GetmaxX:integer и GetmaxY:integer — стандартные функции модуля Graph, которые автоматически подсчитывают максимальное значение координат.

Количество пикселей по горизонтали и вертикали зависит oт аппаратуры — адаптера монитора.

Адаптер — это, специальная плата внутри корпуса компьютера, которая состоит из микросхемы (видеопро­цессор), нескольких портов ввода-вывода (специальные разъёмы), постоянного запоминающего устройства с мат­рицами знаков, а также видеопамяти, где содержится графическое изображение. Компьютеры могут комплек­товаться следующими типами графических адаптеров:

EGA—640x350 (столбцовХстрок) пикселов;

VGA—640X480;

SVGA(SupcrVGA) — 1024Х768 и др.

Работу графического адаптера поддерживает специальная программа, называемая драйвером. Это служебная программа, которая загружается, а компьютер вместе с операционной системой. Загрузочный модуль драйвера хранится в специальном файле с расширением.bgi(Borland Graphics Interface). Файлы с расширением.bgi находятся в каталоге BGI.

Соотношения драйверов и адаптеров следующие:

CGA.bgi — CGA, MCGA;

EGAVGA.bgi-EGA, VGA;

IBM85l4.bgi-IBM8514;

HERG.bgi-Hercules (монохромный адаптер) и т. д. Каждому типу драйвера в модуле Graph соответствует своя константа, например:

Direct=O; (требуется автоматическое определение)

CGA = 1;

EGA = 3;

VGA = 9.

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

Имя константы            Значение Разрешающая способность  Количество цветов            Количество видеостраниц
VGALo 0 640X200 16 4
VGAMed 1 640x350 16 2
VOAHi 2 640X480 16 1
IBM8514Lo 0 G40X480 256 1
IBM8514Hi    1 640X768 256 1

 

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

 

HeipàContensàUnitsàGraphàGo to GRAPH.TPU

                                 Functions and Procedures.

 

                              Инициализация графического режима

  Все объекты, которые входят в модуль Graph, можно использовать только после задания инициализации графического режима. Инициализация графического режима выполняется процедурой InitGraph:

                 InitGraph((драйвер): integer; <режим>:integer; <путь к файлу>: string);.

Для инициализации графического режима с автоматическим распознаванием драйвера и режима достаточно присвоить переменной, отвечающей за драйвер, константу Detect или 0, Присваивать какое-либо значение переменной режима в этом случае не требуется. Третий параметр указывает путь к файлу (например, EGAVGA) с расширением bgi. Если этот файл находится в текущем каталоге, то путь может быть пустым ("). Ошибки, которые могут возникнуть при инициализации графического режима, анализируют с помощью функции GraphResult. Эта функция генерирует соответствующий код ошибки. Код ошибки равен нулю, если инициализация прошла успешно.

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

При частой работе с графикой процесс инициализации удобно оформить отдельной процедурой.

 

                                 Управление экраном и окнами

В графическом режиме поддерживается концепция окон. Окно представляет собой прямоугольную область экрана со своей относительной системой координат. По умолчанию окно занимает весь экран, значения координат его левого верхнего и правого нижнего углов устанавливаются автоматически процедурой инициализации (например, (0,0) и (640,480)).

Чтобы стереть все изображения на экране, т. е. очистить его, используется процедура без параметров С1еarDevice или процедура GraphDefauits, которая не только очищает экран, а и выполняет все стартовые установки графических параметров.

Процедура SetViewPort (X1,Y1,X2,Y2: integer; Clip: boolean); служит для организации окон. Здесь XI,Y1 —координаты левого верхнего угла, X2,Y2 — координаты правого нижнего угла. Параметр Clip определяет, будут ли фрагменты изображения отсекаться при попадании за пределы окна (Clip = True или Clip = ClipOn) или нет (Clip = False или Сliр = СlipOff). После создания окна началом координат станет верхний левый угол окна, который будет иметь координаты (0,0).

Процедура CiearViewPort; используется для очистки окна. Текущее окно при этом заполняется фоновым цветом, а текущий указатель устанавливается в точку с координатами (0,0). Напомним, что это координаты во внутренней системе координат, связанной с данным окном, а не в системе координат полного экрана. Перейти к системе координат полного экрана можно с помощью процедуры ClearDevice или задав в процедуре установки окна максимально возможные значения: SetViewPort(0,0,GetMaxX,GetMaxY,True).

program Prim_2;

Uses Graph;

Var Driver, Mode: integer;

Procedure GrInit;

Begin

Driver:= Detect; {автораспознавание драйвера}

InitGraph (Driver, Mode,'');

If GraphResult<>0 then

Begin

Writeln ('Ошибка инициализации!');

Writeln ('Работа программы прервана');

Halt (1) {Остановить выполнение программы с кодом завершения - 1}

End

End;

Begin

GrInit; {графические действия}

{Устанавливаем размеры "открытого окна"}

Setviewport(1,1,650,450,true); {Рисуем прямоугольник}

Rectangle(50,50,200,200); {Меняем цвет линий для следующей фигуры}

Setcolor(11); {Рисуем прямоугольник}

Rectangle(300,300,400,350); {Меняем цвет линий для следующей фигуры}

Setcolor(5);{Рисуем прямоугольник}

Rectangle(400,30,600,250); {Компьютер ожидает нашего нажатия клавиши Enter}

Readln; {Очістка экрана}ClearViewPort;

{Компьютер ожидает нашего нажатия клавиши Enter для выхода из графического режима}Readln;

CloseGraph

End.

В следующей программе изменили только одну строку Setviewport(1,1,650,450,true) нàSetviewport(1,1,250,250,true). Результат выполнения программы тоже изменился. При выполнении алгоритма Пример 2 на экране рисуется 3 прямоугольника, а при выполнении программы 3 - только 1.

                                            Управление цветом и фоном

Во время инициализации графического режима устанавливается палитра цветов. Палитрой называется максимальный набор цветов, поддерживаемых BGI-драйвером. Она включает 16 цветов, пронумерованных от 0 до 15, которые используются по умолчанию в режимах 640x480 для VGA (и для EGA) как в текстовом, так и в графическом режиме. Названия цветов на английском и русском языках и их номера описаны в таблице.

 

Имя цвета Номер цвета Название цвета  
Black 0 Черный
Blue 1 Синий
Оreeon 2 Зеленый
Cyan 3 Голубой
Red 4 Красный
Magenta 5 Фиолетовый
Brown 6 Коричневый
LightGray 7 Светло-серый
DarkGray 8 Темно-серый
LighiBlue 9 Светло-синий
LightGreen 10 Светло-зеленый
LightCyan 11 Светло-голубой
LightRed 12 Светло-красный
LightMagenla 13 Сетло-филоетовый
White 14 Белый
Yellow 15 Желтый

 

Для установки цвета изображения и окна применяются процедуры SetColor и SetBkColor.

Процедура SetColor((ueeT): word); служит для задания цвета, которым будут обозначены контуры фигуры или текста. Если в качестве цвета указан недопустимый номер цвета, то текущий цвет не изменяется.

Процедура SetBkColor(<цвет>:word); устанавливает новый цвет фона.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: