double arrow

Установка системы графики языка Си

Установка системы графики на языке Си осуществляется в следующем порядке.

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)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: