Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Page 163_192.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
363 Кб
Скачать
☆

2. Инициализация графической системы. Обработка ошибок. Переключение режимов

1). Выбор драйвера и графического режима выполняет функция

detectgraph (&gd, &gm);

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

2). Загрузку драйвера, инициализацию графической системы выполняет функция

Initgraph (&gd, &gm,"путь к bgi-файлам");

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

Если памяти нет в достаточном количестве, функция завершится аварийно с кодом "-5". После же нормального размещения драйвера в памяти, функция initgraph() организует внутренний графический буфер, динамически запрашивая блок ОП размером 4К (по умолчанию). Затем происходит инициализация графических переменных (цвет символов, цвет фона, текущее окно и др.), и адаптер дисплея переводится в графический режим. При этом экран очищается и указатель текущей позиции устанавливается в левом верхнем углу.

Если BGI-файлы находятся в текущей директории, то в качестве третьего параметра функции initgraph() можно задать пустую строку

initgraph (&gd, &gm, " ");

3). Обработка ошибочных ситуаций. В ТС и С++ предусмотрены средства обработки ошибок, возникающих при работе с графикой. Функция

graphresult ();

возвращает код завершения последней используемой графической функции. В случае успеха возвращается "0".

Для различных типов ошибок предусмотрены свои коды завершения:

Константа

Код ошибки

Сообщение

grOK

0

Нет ошибки

grNoInitGraph

-1

Графика не инициализирована

. . .

. . .

. . .

grNoLoadMem

-5

Нехватка памяти для загрузки драйвера

. . .

. . .

. . .

grFontNotFound

-8

Файл шрифта не найден

. . .

. . .

. . .

Имеется возможность распечатать сообщение, соответствующее значению кода ошибки. Для этого используется функция

grapherrormsg (код ошибки);

Она возвращает указатель на строку, содержащую описание кода завершения, переданного в качестве аргумента.

Обычная начальная последовательность действий при работе с графикой выглядят таким образом:

#include <stdio.h>

#include <stdlib.h>

#include <graphics.h>

void main ( )

{

int gd, gm, error;

detectgraph (&gd, &gm);

initgraph (&gd, &gm, " ");

error = graphresult ( );

if (error !=gr0k )

{

puts (" ошибка графики");

puts (grapherrormsg (error));

exit (1);

}

// Тело программы

. . . . . . . . . . . .

closegraph ( );

exit (0);

}

4). Переключение режимов. Для временного перехода в текстовый режим дисплейного адаптера в графической библиотеке предусмотрена функция

restorecrtmode ();

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

setgraphmode (gm);

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

getgraphmode ();

и сохранен в программе.

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

getmaxmode ();

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

closegraph ();

5). Установка цветов, шрифтов, стилей линий и стилей закраски. Для указания цвета в программе можно пользоваться константами перечислимого типа или соответствующими им целыми значениями.

Стандартная цветовая палитра такова:

BLACK 0 черный

BLUE 1 синий

GREEN 2 зеленый

GRAY 3 серый

RED 4 красный

MAGENTA 5 малиновый

BROWN 6 коричневый

LIGHTGRАY 7 светло-серый

DARKGRАY 8 темно-серый

LIGHTBLUE 9 светло-синий

LIGHTGREEN 10 светло-зеленый

LIGHTCYAN 11 светло-бирюзовый

LIGHTRED 12 светло-красный

LIGHTMAGENTA 13 светло-малиновый

YELLOW 14 желтый

WHITE 15 белый

Цветом фона можно управлять с помощью функции

setbkcolor (цвет);

Текущее значение рисующего цвета (цвета выводимых символов и линий) устанавливается функцией

setcolor (цвет);

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

settextstyle (шрифт, направление, размер);

Допустимые значения для параметра шрифт:

0 DEFAULT_FONT (стандартный)

1 TRIPLEX_FONT (типа триплекс; в файле TRIP.CHR)

2 SMALL_FONT (уменьшенный; в файле LITT.CHR)

3 SANS_SERIF_FONT (прямой; в файле SANS.CHR)

4 GOTHIC_FONT (готический; в файле GOTH.CHR)

Допустимые значения для параметра направление:

0 HORIZ_DIR (слева направо)

1 VERT_DIR (снизу вверх)

Аргумент, управляющий размером шрифта, может изменяться от 1 до 10. Для стандартного шрифта эта величина говорит, во сколько раз надо увеличить каждый символ (этот шрифт определен на матрице 8*8, значит, если размер равен 4, то символы будут увеличены до матрицы 32*32 пиксела). Для остальных шрифтов этот параметр задает не линейную, а экспоненциальную шкалу масштабирования. Базовый вариант символа соответствует размеру, равному 4. Поэтому если размер равен 7, то символы увеличатся в 2 раза; если 8 - то в 3 раза; если 9 - то в 4 раза.

Использование вертикального расположения строки делает символы ниже и шире, чем в горизонтальной строке. Это связано с эффектом "неквадратности" пикселов на некоторых типах дисплеев.

Символы текста всегда выводятся сплошными тонкими линиями.

Для установки характера и толщины линий геометрических обьектов используется функция

setlinestyle (вид, образец, толщина);

Допустимые значения для параметра толщина:

1 NORM_WIDTH (линия в один пиксел)

3 THICK_WIDTH (линия в три пиксела)

Коды для параметра вид (только для кусочно-линейных графических примитивов):

0 SOLID_LINE (сплошная)

1 DOTTED_LINE (из точек)

2 CENTER_LINE (из точек и тире)

3 DASHED_LINE (пунктирная)

4 USERBIT_LINE (определяемая пользователем)

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

Например, шаблон для пунктирной линии может быть таким: 0x3333, что соответствует последовательности битов 0011001100110011.

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

Для установки стиля закраски используется функция

setfillstyle (тип закраски, цвет);

Допустимые значения параметра тип закраски:

0 EMPTY_FILL (штриховка цветом фона)

1 SOLID_FILL (сплошное заполнение указанным цветом)

2 LINE_FILL (штриховка горизонтальными линиями)

3 LTSLASH_FILL (штриховка наклонными линиями ///// )

4 SLASH_FILL (штриховка утолщенными линиями ////// )

5 BKSLASH_FILL (штриховка утолщенными линиями \\\\\\ )

6 LTBKSLASH_FILL (штриховка наклонными линиями \\\\\ )

7 HATCH_FILL (прямоугольная горизонтальная штриховка)

8 XHATCH_FILL (косая штриховка)

9 INTERLEAVE_FILL (косая перекрывающаяся штриховка)

10 WIDE DOT_FILL (заполнение редко расположенными точками)

11 CLOSE_DOT_FILL (заполнение часто расположенными точками)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]