Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Графика.doc
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
92 Кб
Скачать
☆

Ошибки инициализации графического режима и их обработка

Если при инициализации графического режима происходит ошибка (не найден драйвер, недопустимый режим, аппаратная ошибка и т.д.), то процедура InitGraph генерирует соответствующий код ошибки (Марченко, стр.329). Получить этот код программа пользователя может, применив функцию GraphResult. Для работы с кодами ошибок в модуле Graph существуют специальные константы (Марченко, стр.329). В случае успешной инициализации графики возвращается код 0 – константа grOK.

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

Program GraphInitDemo;

Uses Graph; {Использовать модуль Graph}

Var GraphDriver, {Графический драйвер}

GraphMode, {Графический режим}

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

Procedure MyGrapInit;

Begin

GraphDriver := Detect;

InitGraph (GraphDriver, GraphMode, ‘c:\bp\bgi’);

ErrorCode := GraphResult; {результат инициализации}

If ErrorCode <> grOk then

Begin

Writeln(‘Ошибка инициализации графики: ‘,

GraphErrorMsg(ErrorCode));

Writeln(‘Работа программы прервана’);Halt(1);

End;

End;

Begin

MyGrapInit;

Line(0,0,GetMaxX,GetMaxY); {работа с изображением}

Readln;

CloseGraph;

End.

Система координат, текущий указатель

Д ля построения изображений на экране используется система координат. Отсчет начинается с левого верхнего угла, который имеет координаты (0,0). Цена деления - один пиксель.

Максимально возможные значения по x и по y зависят от графического режима. Узнать текущее положение невидимого графического курсора можно после инициализации графического режима с помощью функций:

GetMaxX : integer; GetMaxY : integer;

Например, используя эти функции, можно определить координаты центра экрана:

Var Xcent, Ycent: integer;

Begin Xcent := getmaxx div 2;

Ycent := getmaxy div 2;

Точка начала рисования называется текущим указателем, или графическим курсором. Он аналогичен текстовому, но не виден на экране. Для определения текущих координат невидимого графического курсора используются функции Getx, Gety, которые возвращают соответственно X- и Y-координаты графического курсора:

Var Xpos, Ypos: integer;

begin

Xpos := Getx; Ypos := Gety;

Поместить графический курсор в точку с координатами (X,Y) можно с помощью процедуры MoveTo(X,Y). Кроме того, некоторые процедуры для рисования и процедуры инициализации и очистки экрана меняют положение графического курсора.

Установка цвета и типа линии для рисования

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

SetColor (color : word) SetBkColor (color : word)

И тот, и другой цвет можно задавать числом (от 0 до 15) или текстовой константой (Black, Blue, Green и т.д). Цвета со значениями от 8 до 15 являются на тон светлее и получаются с помощью прибавления 8 к числам из промежутка 0 - 7. Например, светло-зеленый цвет задается числом 10 или константой LightGreen. Если цвет не задан, то используются стандартные цвета - белый цвет рисования на черном фоне.

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

GetColor : word -возвращает текущий цвет рисования;

GetBkColor : word - возвращает текущий фоновый цвет;

GetMaxColor : word -возвращает максимально возможный номер цвета, который можно задать процедурой SetColor.

Кроме текущего цвета, существует понятие текущего типа линии, которым производится рисование. Тип линии определяется толщиной линии, видом линии (сплошная, пунктирная, штрих-пунктирная). Задание этих параметров осуществляется функцией:

SetLineStyle (LineStyle, Pattern, S : word)

где параметр LineStyle устанавливает тип линии. Возможные значения этого параметра приведены в таблице.

Константа

Значение

Описание

SolidLn

0

Непрерывная линия

DottedLn

1

Линия из точек

CenterLn

2

Линия из точек и тире

DasedLn

3

Штриховая линия

UserBitLn

4

Тип линии пользователя

Pattern - образец, для стандартных стилей линии значение pattern равно 0. S – толщина линии, определяемая одной из двух констант: 1 - обычная, 3 - тройная толщина (три пикселя).

Пользователь может создать свой собственный образец типа линии. Значением pattern в этом случае должно быть число из четырех 16-ричных цифр, т.е. всего 16 бит, где каждый бит имеет значение 1 (есть штрих) или 0 (нет штриха). Например, для следующего образца

устанавливается тип линии пользователя: SetLineStyle(4, $F6F6, 3).

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