Установка системы графики на языке Си осуществляется в следующем порядке.
1) Выполняется инициализация модели графики языка Си функцией графики.
# include <graphics.h>
void far initgraph (int far * graphdriver, int far * graphmode, char far * pathtodriver)
указателями graphdriver, graphmode устанавливается номер драйвера и графического режима соответственно.
Номера драйверов распределены следующим образом: 1 – загрузка драйвера CGA, 2 – драйвера MCGA, 3 – драйвера EGA, 4 – EGA64, 5 – EGAMONO, 6 – IBM 8514, 7 – HERCMONO, 8 – ATT 400, 9 – VGA, 10 – PE 3270. В том случае, если номер драйвера 0 или соответствует символической константе DETECT, осуществляется запрос автоматического определения типа драйвера.
Все функции графической библиотеки находятся в заголовочном файле graphics.h.
Если номер драйвера и режима не заданы специально, то они задаются следующей функцией
Void far detectgraph (int far * graphdriver, int far graphmode),
определяющей тип активного видеоадаптера и тип монитора.
Переменная graphdriver указывает путь, по которому осуществляется доступ к графическому драйверу BGI.
Например, если составить функцию
|
|
Void ingraph () {
int graphdriver, graphmode;
graphdriver = DETECT;
graphmode = 0X12;
initgraph (& graphdriver, & graphmode, “C:\BorlandC\\bgi”;
}
то ею автоматически определится номер драйвера загрузки, графический режим 12h, а путь к графическому драйверу BGI пройдет через жесткий диск С и директорию BorlandC.
2) После инициализации графики необходимо включить функции выявления возможных ошибок.
int far graphresult (void)
и
char * far grapherrormsg (int errorcode)
Первая из них возвращает код ошибки (табл. 97)
Таблица 97. Коды ошибок, возвращаемых при выполнении функций
графической библиотеки.
Символическая константа из graphics_errors | Значение (в 10 с/с) | Описание |
gr Ok gr No Init Graph gr Not Detected gr File Not Found gr Invalid Driver gr No Load Mem gr No Scan Mem gr No Flood Mem gr Font Not Found gr No Font Mem gr Invalid Mode gr Error gr Ioerror gr Invalid Font gr Invalid Font Num gr Invalid Device Num gr Invalid Version | -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -18 | Отсутствие ошибки Графический интерфейс (.BGI - драйвер) не инсталлирован. Следует выполнить inigraph () Не обнаружен видеоадаптер, способный работать в запрошенном (или в любом случае DETECT) графическом режиме. Не найден по заданному маршруту и в текущей директории.BGI – файл. Заданный в качестве.BGI – драйвера файл не соответствует стандарту TurboC. Недостаточно свободной памяти для загрузки драйвера и хранения промежуточных результатов. Нехватка памяти при выполнении графических функций заполнения. Нехватка памяти при выполнении графических функций заполнения. Не найден файл описания шрифта. Отсутствие памяти для загрузки файла шрифта. Недопустимый графический режим для выбранного.BGI – драйвера. Ошибка функции графики. Ошибка ввода – вывода в графическом режиме. Файл шрифта, не соответствующий стандарту Borland International. Недопустимый номер шрифта. Недопустимый номер устройства. Недопустимый номер версии.BGI – драйвера (.BGI – драйвер для Turbo C версии 1.5) |
а вторая по коду ошибки errorcode возвращает адрес (указатель) на ASCII Z – строку символов, содержащую сообщение об ошибке.
|
|
1) Определение и установка графического режима.
Функция
int far getgraphmode (void)
возвращает текущий режим.
int far getmaxmode (void)
возвращает число, определяющее максимально возможный режим.
int far getmax x (void)
int far getmax y (void)
определяет максимальные значения X и Y для данного режима.
char * far getmodename (int mode _ number)
возвращает указатель на ASCII Z – строку символов, содержащую имя константы, соответствующей режиму mode _ number.
void far getmoderange (int graphdriver, int far * lomode, int far * himode)
возвращает диапазон допустимых числовых значений режимов работы драйвера.
void far setgraphmode (int mode)
устанавливает видеосистему в режим, заданный значением переменной mode.
void far restorecrtmode (void)
возвращает видеоадаптер в режим, в котором он был до выполнения инициализации.
Значения переменной mode соответствуют номерам констант режима, приведенным в табл. 98.
Таблица 98. Видеорежимы в библиотеке графики языка Си.
Константа режима | Характеристика режима | Номер режима | Тип адаптера и драйвер |
CGAC0 CGAC1 CGAC2 CGAC3 | 320x200, палитра 0,1 с. 320x200, палитра 1,1 с. 320x200, палитра 2,1 с. 320x200, палитра 3,1 с. | 4,5 | CGA, EGA, VGA, MCGA и др. в режиме эмуляции CGA. Используется CGA.BGI |
CGAH1 | 640x200, 2 цвета, 1 с. | ||
MCGAC0 MCGAC1 MCGAC2 MCGAC3 | 320x200, палитра 0,1 с. 320x200, палитра 1,1 с. 320x200, палитра 2,1 с. 320x200, палитра 3,1 с. | 4,5 | MCGA. Используется MCGA.BGI |
MCGAMED | 640x200, 2 цвета, 1 с. | ||
MCGAHI | 640x480, 2 цвета, 1 с. | 11h | |
EGALO | 640x200, 16 цветов, 4 с. | 0Eh | EGA с памятью > 128К байт, VGA при эмуляции EGA. Используется EGAVGA.BGI |
EGAHI | 640x350, 16 цветов, 2 с. | 10h | |
EGA64LO | 640x200, 16 цветов, 1 с. | 0Eh | EGA с памятью 64К байт, VGA при эмуляции EGA. Используется EGAVGA.BGI |
EGA64HI | 640x350, 4 цвета, 1 с. | 10h | |
EGAMONOHI | 640x350, 2 цвета, 1 с. для платы с памятью 64К байт и 4 с. для платы с памятью 256К байт | 0Fh | EGA, VGA при эмуляции EGA. Используется EGAVGA.BGI |
HERCMONOHI | 720x348, 2 с. | 7h | HGC. Используется HERC.BGI |
ATT400C0 ATT400C1 ATT400C2 ATT400C3 | 320x200, палитра 0,1 с. 320x200, палитра 1,1 с. 320x200, палитра 2,1 с. 320x200, палитра 3,1 с. | 4,5 | AT&T. Используется ATT.BGI |
ATT400MED | 640x200, 2 цвета, 1с. | ||
ATT400HI | 640x400, 2 цвета, 1с. | ? | |
VGALO | 640x200, 16 цветов, 4с. | 0Eh | VGA. Используется EGAVGA.BGI |
VGAMED | 640x350, 16 цветов, 2с. | 10h | |
VGAHI | 640x480, 16 цветов, 1с. | 12h | |
PC3270HI | 720x350, 1 с. | ? | IBM PC 3270. Используется PC3270.BGI |
IBM8514LO | 640x480, 256 цветов | ? | IBM 8514. Используется IBM8514.BGI |
IBM8514HI | 1024x768, 256 цветов | ? | IBM 8514. Используется IBM8514.BGI |
1) Установка цветов.
Для работы с цветами и палитрами используются следующие функции языка Си
Int far getbcolor (void)
возвращает целое число равное коду цвета фона.
struct palettetype * far getdefaultpalette (void)
возвращает указатель на структурную переменную по шаблону palettetype содержащую описание палитры. Шаблон этой структуры описывается так
struct palettetype
{ unsigned char size; /* число цветов */
signed char colors [MAXCOLORS+1]; /* значения в регистрах палитры*/
}
Палитра по умолчанию EGA и VGA – адаптеров представлена в таблице 98а.
Таблица 98а. Палитра по умолчанию EGA и VGA – адаптеров.
Номер регистра палитры (код цвета пиксела) | Значение, записанное в регистр палитры. | |||
В 10 с/с | IRGB | Константа Turbo C | В 10 с/с | RgbRGB |
EGA_BLACK EGA_BLUE EGA_GREEN EGA_CYAN EGA_RED EGA_MAGENTA EGA_BROWN EGA_LIGHTGRAY EGA_DARKGRAY EGA_LIGHTBLUE EGA_LIGHTGREEN EGA_LIGHTCYAN EGA_LIGHTRED EGA_LIGHTMAGENTA EGA_YELLOW EGA_WHITE |
int far getmaxcolor (void)
возвращает максимальное значение кода цвета пиксела минус 1.
void far getpalette (struct palettetype far * palette)
используется в EGA или VGA – адаптерах для задания новых значений во всех 16 внутренних регистрах палитры. Для этого используется структура по шаблону palettetype.
void far setbcolor (int color)
|
|
устанавливает новый цвет пикселов, имеющих код цвета 0. При этом новый цвет фона задает значение аргумента color.
void far setcolor (int color)
устанавливает цвет, используемый функциями графического вывода в значение, заданное аргументом color.
void far setpalette (int colornum, int color)
устанавливает новое значение для одного из цветов палитры. Аргумент colornum соответствует коду цвета пиксела, аргумент color задает новое значение цвета.
void far setrgbpalette (int colornum, int red, int blue)
используется для описания палитры из 256 возможных цветов, для видеоадаптера IBM PC 8514. Аргумент colornum определяет номер DAC – регистра – код цвета пиксела. Аргументы red, green, blue задают интенсивность соответственно красного, зеленого и синего цветов.
1) Установка видеостраницы.
void far setactivepage (int page)
устанавливает в качестве активной страницу page.
void far setvisualpage (int page)
выбирает в качестве видимой страницу page.
2) Задание окна экрана. Определение и установка графических координат.
Окно экрана – это прямоугольная область экрана, заданная пиксельными координатами левого верхнего и правого нижнего углов. Оно обозначается словом viewport.
Описание окна экрана реализуется следующими функциями.
void far getvievsettings (struct viewporttype far * vievport)
заполняет поля структурной переменной по шаблону vievporttype информацией о графическом окне.
Структура viewporttype имеет вид
struct viewporttype
{int left, top; /* координаты левого верхнего угла */
int right, bottom; /* координаты правого нижнего угла */
int clip; /* усечения при выводе (1 – усечение, 0 – нет) */
Void far setviewport (int left, int top, int right, int bottom, int clip)
описывает новое графическое окно с координатами левого верхнего (left, top) и правого нижнего (right, bottom) углов.
Int far getx (void)
Int far gety (void)
возвращают текущие координаты Х и У, измеряемые относительно координат
левого верхнего угла текущего графического окна
void far moveto (int x, int y)
устанавливает новое значение координат текущей позиции.
void far moverel (int dx, int dy)
устанавливает новое значение координат текущей позиции. Аргументы задают новые значения координат относительно текущих координат графического окна.
7) Установка дополнительных драйверов.
|
|
Дополнительные драйверы устанавливаются следующими функциями
int far installuserdriver (char far*name, int huge (*deteet)(void))
добавляет во внутреннюю таблицу имя графического драйвера с указателем
name.
Включение драйвера в EXЕ -файл выполняют функции регистрации такого драйвера
int register bgidriver (void (*driver)(void))
Int far register far bgidriver (void far*driver)
Например, если встраивается драйвер EGAVGA.BGI, преобразуемый в OBJ -файл EGAVGA.OBJ утилитой BGIOBJ.EXE без ключа IF, то его регистрация осуществляется так
Register far bgidriver (EGAVGA _ driver)