ЗНАЕТЕ ЛИ ВЫ?

Обработка ошибок системы графики



Защищенное от ошибок построение программы требует использования функции graphresult() после любого обращения к функциям detectgraph() и initgraph(). Далее следует описание функций обработки ошибок, сообщающих внутренние коды ошибок графической библиотеки (graphresult()) или формирующей строку диагностического сообщения (grapherrormsg()).

 

int graphresult(void)

 

Возвращает значение внутреннего кода ошибки, установленного последним обращением к функциям графической библиотеки. Перед завершением сбрасывает код ошибки в 0. Прикладная программа может интерпретировать возвращаемое значение, сопоставляя его с целым числом либо с символической константой из перечислимого типа graphics_errors, определенного в <graphics.h> (табл. 3.3).

 

char * grapherrormsg( int errorcode)

Возвращает указатель на ASCII-строку символов, содержащую сообщение об ошибке, соответствующее внутреннему коду ошибки errorcode функций графики Turbo С. Функция grapherrormsg() возвращает указатели на сообщения на английском языке. В принципе несложно выполнить их "перевод" непосредственно, переработав саму функцию grapherrormsg().

Табл. 3.3. Коды ошибок, возвращаемые при выполнении функций графической библиотеки.

Символическая константа из graphics_errors Значение (в 10 с/с) Описание
grOk Отсутствие ошибки
grNoInitGraph -1 Графический интерфейс (.BGI-драйвер) не инсталлирован. Следует выполнить initgraph()
grNotDetected -2 Не обнаружен видеоадаптер, способный работать в запрошенном (или любом в случае DETECT) графическом режиме
grFileNotFound -3 Не найден по заданному маршруту и в текущем директории .BGI-файл
grlnvalidDriver -4 Заданный в качестве .BGI-драйвера файл не соответствует стандарту Turbo С
grNoLoadMem -5 Недостаточно свободной памяти для загрузки драйвера и хранения промежуточных результатов
grNoScanMem -6 Нехватка памяти при выполнении графических функций заполнения
grNoFloodMem -7 Нехватка памяти при выполнении графических функций заполнения
grFontNotFound -8 Не найден файл описания шрифта
grNoFontMem -9 Отсутствие памяти для загрузки файла шрифта
grlnvalidMode -10 Недопустимый графический режим для выбранного .BGI-драйвера
grError -11 Ошибка функции графики
grIOerror -12 Ошибка ввода-вывода в графическом режиме
grlnvalidFont -13 Файл шрифта, не соответствующий стандарту Borland International
grlnvalidFontNum -14 Недопустимый номер шрифта
grlnvalidDeviceNum -15 Недопустимый номер устройства
grlnvalidVersion -18 Недопустимый номер версии .BGI-драйвера (.BGI-драйвер для версии 1.5)

 

Определение и установка графического режима

После того, как проведена инициализация графической системы, может быть установлен другой, не превосходящий максимального, режим видеоадаптера и выбраны цвета для пикселов. Установку режима выполняет функция setgraphmode(). Целая группа функций – getgraphmode(), getmaxmode(), getmodename() , getmoderange() - упрощает работу по определению текущего ус­тановленного режима. Две функции позволяют определить ширину и высоту экрана в пикселах для текущего видеорежима: getmaxx() и getmaxy(). Функция restorecrtmode() возвращает видеоадаптер в текстовый режим. Далее следует описание упомянутых функций.

int getgraphmode (void)

 

Возвращает текущий графический режим, установленный для графической модели функциями initgraph() или setgraphmode(). Возвращаемое значение соответствует номеру режима, установленному для инсталлированного драйвера графики. Возвращаемое значение соответствует числовому значению символических констант режима, перечисленных в табл. 3 .1.

int getmaxmode(void)

 

Возвращает число, определяющее максимально возможный для инсталлиро­ванного .BGI-драйвера режим. Как и в предыдущем случае, возвращаемое значе­ние соответствует номеру режима, установленному для инсталлированного драйвера графики. Возвращаемое значение соответствует числовому значению символических констант режима, перечисленных в табл. 3.1.

int getmaxx(void)

int getmaxy(void)

 

Возвращают максимальные значения координат X и Y для текущего видеоре­жима. Например, для режима CGA0 getmaxx() возвращает значение 319, a getmaxy() -199. Функции особенно полезны для центрирования изображений и определения таких размеров знакомест при выводе текста в графическом режиме, чтобы текст помещался в заданную область экрана.

char * getmodename(int mode_number)

 

Возвращает указатель на ASCII-строку символов, содержащую имя символи­ческой константы, соответствующей режиму mode_number. Значение mode_number должно быть в пределах диапазона значений, возвращенных функцией getmaxmode() (для любого драйвера) или getmoderange() (для драйвера Borland International).

void setgraphmode(int mode)

 

Устанавливает видеосистему в режим, заданный значением переменной mode, и сбрасывает значения внутренних переменных системы графики в их значения по умолчанию (стиль линий, маска заполнения, шрифт и т.д.). Значение mode соответствует числовому значению символических кон­стант режима, перечисленных в табл. 3.1. При задании недопустимого режима для текущего .BGI-драйвера функция устанавливает внутренний код ошибки -1 (см. табл. 3.3).

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

 

void restorecrtmode(void)

 

Возвращает видеоадаптер в режим, в котором он был до выполнения ини­циализации системы графики. Как правило, исходным режимом будет текстовый. В том случае, если выполняется временный возврат в исходный (текстовый) режим, перед выполнением функции restorecrtmode() в переменной следует сохранить текущий графический режим, используя, например, обращение к функции getgraphmode(), после чего возможен возврат в графический режим с помощью функции setgraphmode().

 

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

После инициализации системы графики и уста­новки нужного видеорежима возможен выбор необходимых цветов пикселов. Возможности по выбору цветов принципиально различны для CGA-, EGA- и VGA-адаптеров, что обусловлено различной логикой построения аппаратных средств.

Далее приведена спецификация функций библиотеки графики для работы с цветами и палитрами.

int getbkcolor(void)

 

Возвращает целое число, равное коду цвета фона.

int getmaxcolor(void)

 

Возвращает максимальное значение кода цвета пиксела минус 1. Это значение позволяет установить максимальное число цветов, которое может отображаться на экране. В зависимости от режима, в котором проведена инициализация системы графики, возвращаемое значение может быть равно 1, 3 или 15.

void setbkcolor (int color)

 

Устанавливает новый цвет пикселов, имеющих код цвета 0. Новый цвет фона задает значение аргумента color.

 

void setcolor (int color)

 

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

 

Задание окна экрана. Определение и установка графических координат

Окно экрана в графическом режиме, или графическое ок­но (viewport), - это прямоугольная область экрана, заданная пиксельными координатами левого верхнего и правого нижнего углов. В графическом окне определены относительные координаты. С++ позволяет выполнять вывод текста и графических примитивов в графическое окно. При этом по жела­нию пользователя вывод, не вмещающийся в границы окна, может усекаться. Графическое окно может иметь отличаю­щиеся от других участков экрана цвета фона и пикселов, маску заполнения и другие характеристики.

Для описания окна используется функция setviewport(). Текущие характеристики окна доступны программе через обра­щение к функции getviewsettings().

void far getviewsettings( struct viewporttype *viewport)

 

Заполняет поля структурной переменной по шаблону viewporttype инфор­мацией о графическом окне. Описание структурной переменной выполняет вызывающая сторона. Функции передается указатель на описанную переменную. Шаблон viewporttype описан в <graphics.h>:

 

struct viewporttype

{

int left, top; /* координаты ( столбец, строка) левого верхнего угла* /

int right, bottom; /* координаты (столбец, строка) правого нижнего угла */

int clip; /* Флаг усечения при выводе (1 - усечение, 0 - нет )*/

}

Левый верхний угол окна рассматривается как начало относительных ко­ординат X и Y всеми функциями графического вывода, в том числе и при выводе текста в графических режимах. Сразу после инициализации системы графики графическое окно охватывает весь экран, и, таким образом, началом графических координат по умолчанию является самый левый верхний угол экрана. Основное применение функции - определение и сохранение характеристик текущего графического окна перед переопределением текущего окна для последующего восстановления параметров окна.

void setviewport (int left, int top, int right, int bottom, int clip)

 

Описывает новое графическое окно с координатами (столбец, строка) левого верхнего угла left, top, координатами правого нижнего угла right, bottom и значением флага усечения clip. В качестве начала текущих координат для функций графического вывода устанавливается левый верхний угол.

Помимо явного задания окна функцией setviewport(), оно специфицируется и неявно при выполнении функций initgraph(), setgraphmode() и graphdefaults(). При каждом их выполнении в качестве графического окна устанавливается весь экран.

Графические координаты X и Y измеряются в пикселах экрана относительно координат левого верхнего угла текуще­го окна. Функции графического вывода изменяют эти координаты в соответствии с объемом выведенной на экран инфор­мации. Текущие координаты в окне доступны через функции getx() и gety(). Установку нужных значений координат текущей позиции выполняют функции moveto() и moverel(). Кроме того, некоторые функции графического вывода позволяют задать текущую позицию (см., например, outtextxy()).

 

int getx (void)

int gety (void)

 

Возвращают текущие координаты X и Y, измеряемые относительно коор­динат левого верхнего угла текущего графического окна.

 

void moveto (int x, int y)

 

Устанавливает новое значение координат текущей позиции. Аргументы х, у задают новые значения координат текущей позиции относительно координат левого верхнего угла текущего графического окна.

 

void moverel(int dx, int dy)

 

Устанавливает новое значение координат текущей позиции. Аргументы dx, dy задают новые значения координат относительно текущих координат графического окна. Другими словами, новая текущая позиция устанавливается в точку, отстоящую от текущей позиции на dx столбцов пикселов по горизонтали и dy строк пикселов по вертикали. Чтобы переместить текущую позицию влево, нужно задать для dx отрицательное значение. Для перемещения текущей позиции по вертикали вверх задается отрицательное значение для dy.

 





Последнее изменение этой страницы: 2016-06-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.216.79.60 (0.015 с.)