Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Координаты устройства и мировые координаты




Графический режим

Модуль Graph представляет собой библиотеку подпрограмм, обеспечивающих полное управление графическими режимами различных адаптеров дисплеев: CGA, EGA, VGA и других. Библиотека содержит более 50 графических процедур и функций, как базовых (рисование точек, линий, окружностей и т.д.), так и расширяющих возможности базовых (многоугольники, заполнение фигур, вывод текста и др.).

Файл BGI – это графический интерфейс (Borland Graphic Interface) фирмы Borland. Он обеспечивает взаимодействие программ с графическими устройствами. Перед работой программ в графических режимах дисплея процедура InitGraph определяет тип адаптера, представленного в ПЭВМ, и загружает в память соответствующий BGI-драйвер, в котором определены режимы работы. Процедура CloseGraph выгружает графический драйвер из памяти и восстанавливает текстовый режим работы видеоадаптера.

Процедура инициализации графического режима InitGraph

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

InitGraph (var GraphDriver : Integer; {тип адаптера}

  var GraphMode : Integer; {режим графики}

      DriverPath : String); {путь к драйверу}

В модуле Graph определены константы для задания вида графического адаптера параметром GraphDriver. Если параметру GraphDriver присвоить значение константы Detect, то система включится в режим автоопределения. Если возможно переключение системы в графический режим, то инициализируется соответствующий BGI-драйвер и включается режим с максимальным разрешением. В параметрах GraphDriver и GraphMode при этом будут возвращены автоматически выбранные значения или код ошибки.

Если параметр GraphDriver содержит номер конкретного адаптера, то и второй параметр GraphMode должен иметь номер режима, допустимого при этом адаптере.

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

Параметр DriverPath указывает путь в каталог, содержащий файлы с необходимыми драйверами. Если в него передается значение «пустая строка», то драйверы должны находиться в текущем каталоге.

Процедура закрытия графического режима CloseGraph

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

Обработка ошибок инициализации

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

Если же ошибок при инициализации не обнаружено, то в параметре GraphDriver возвращается номер адаптера.

Еще есть один способ проверки результата проведения графической операции. Он осуществляется с помощью функции GraphResult : Integer, которая возвращает код результата последнего вызова InitGraph.

 

Процедура DetectGraph

Для тестирования графического адаптера в модуле Graph объявлена процедура:

DetectGraph (var GraphDriver, GraphMode : Integer);

Эта процедура может быть вызвана до инициализации графического режима. Через формальный параметр GraphDriver возвращается значение номер драйвера, а через параметр GraphMode – номер режима. Эти значения рекомендуется подставлять в качестве фактических параметров в процедуру InitGraph.

Пример работы с графическим режимом:

Program TestGraph;

Uses Graph;

Var

  gDriver : Integer;   {для графического адаптера}

  gMode  : Integer;   {для графического режима}

  ErrorCode : Integer;   {код ошибки}

Begin

  DetectGraph(gDriver, gMode); {опрос наличия адаптера и его типа}

  ErrorCode := GraphResult; {получение кода ошибки, если таковая есть}

  If ErrorCode <> grOK then

        Writeln(GraphErrorMsg(ErrorCode));

  Else

  Begin

        InitGraph(gDriver, gMode, ’’); {инициализация граф.режима}

        ...                {работа в графическом режиме}

        CloseGraph;        {закрытие граф.режима}

End

End.

Очистка экрана

Процедура ClearDevice очищает графически экран и устанавливает указатель позиции в положение (0, 0).

Процедура GraphDefaults, кроме очистки экрана, устанавливает ряд параметров графической системы:

1) графическое окно становится равным размеру экрана;

2) восстанавливается системная цветовая палитра;

3) переназначаются цвета основных линий и фона экрана;

4) толщина и стиль линий принимаются как по умолчанию;

5) цвет и шаблон заливки геометрических фигур и замкнутых ломаных принимается как по умолчанию;

6) переустанавливается активный шрифт и его стиль.

Координаты устройства и мировые координаты

В растровой компьютерной графике экран представляет собой прямоугольный массив адресуемых точек и любое изображение на нем образуется как композиция светящихся или погашенных пикселов ( так называется минимальный элемент изображения). Эти точки адресуются двумя целыми - горизонтальным номером точки nx и вертикальным номером ny:

0 <= nx <= GetMaxX

0 <= ny <= GetMaxY

Функции GetMaxX и GetMaxY возвращают количество адресуемых точек по горизонтали и по вертикали минус единица.

Точка (0,0) обычно расположена в левом верхнем углу экрана дисплея. Координаты (nx, ny) называют координатами устройства, и могут принимать только целые значения.

В компьютерной графике используются еще две системы координат. Первая – физическая система координат (px, py), где px – физическое расстояние на экране по горизонтали, а py – по вертикали. Ее оси измеряются в физических единицах измерения.

Вторая система координат – мировая. Она представляет собой декартову систему (X, Y), определенную программистом, и является независимой от типа устройства отображения:

xmin < x < xmax

ymin < y < ymax

Параметры, которыми задаются диапазоны изменения x и y (xmin, xmax, ymin, ymax), определяют прямоугольную область в абстрактном математическом двумерном пространстве.

Для перевода текущих координат точки из мировой системы в систему устройства можно написать следующую процедуру:

Procedure WorldToDevice (x, y : Real; world_coord : TWorldRec;

                    var nx, ny : Integer);

Begin

  nx := Round(( x - world_coord.Xmin )/

              ( world_coord.Xmax - world_coord.Xmin ))*GetMaxX;

  ny := Round(( y - world_coord.Ymin )/

              ( world_coord.Ymax - world_coord.Ymin ))*GetMaxY;

End;

TWorldRec = record

Xmin, Ymin,        {предельные значения мировых координат}

 Xmax, Ymax : Real;

End;










Последнее изменение этой страницы: 2018-04-12; просмотров: 265.

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