Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций -=Вычислительная техника и прог...docx
Скачиваний:
11
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

5. Программирование графических изображений в языке с

5.1. Лекция 14. Программирование графических изображений

5.1.1. Графический режим видеоадаптера

Видеоадаптер персонального компьютера может работать в одном из двух режимов — текстовом или графическом. В текстовом режиме минимальным элементом изображения является пиксель — графическая точка. Отметим, что Windows-программы работают только в графическом режиме, а использование текстового режима является характерным только для DOS-программ. Когда программу, которая работает в текстовом режиме, запускают из среды Windows, режим видеоадаптера может оставаться графическим, а текстовый режим будет эмулироваться только в пределах окна программы. Такой режим выполнения DOS-программ называется оконным. Полноэкранный режим выполнения DOS-программ предполагает установку необходимо видеорежима во время ее запуска и возврат к исходному режиму после завершения её работы. DOS-программа, которая работает с графикой, может быть выполнена только в полноэкранном режиме.

Программа, работающая в графическом режиме, использует графические драйверы — файлы, которые обеспечивают взаимодействие с видеоадаптером. Для разных типов видеоадаптеров используют различные графические драйверы. Основными характеристиками видеоадаптера являются разрешающая способность и количество цветов. Разрешающая способность задается парой чисел, первое из которых показывает количество пикселей в одной строке, а второе — число строк. Современные дисплейные адаптеры принадлежат к классу SVGA (Super Video Graphics Array). Такие адаптеры характеризуются разрешающей способностью более 640480 пикселей и позволяют использовать не менее 256 цветов. Для работы с SVGA адаптерами используются драйверы svga256.bgi и egavga.bgi.

Графическая система языка Borland C состоит их обширной библиотеки GRAPHICS.LIB. Компилятор должен иметь доступ к этой библиотеке, иначе компиляция программы, содержащей вызовы функций графической библиотеки, будет заканчиваться выдачей множественных сообщений об ошибках. Для этого необходимо подключить графическую библиотеку:

1) В меню оболочки выбирать Options>Linker>Libraries…

2) На открывшейся вкладке Libraries в поле Libraries напротив строчки Graphic library поставить отметку выбора (курсором «мыши» или клавишей «пробел»).

3) На вкладке Libraries нажать кнопку-надпись «Ок».

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

Графическая система содержит внутреннюю переменную, предназначенную для хранения кода завершения графических функций. В случае ошибки код завершения функции является отрицательным и определяется константой перечислимого типа graphics_errors. Текущее значение переменной возвращает функция graphresult. Прежде чем обращаться в прикладной программе к функциям графической библиотеки, необходимо выбрать графический драйвер, соответствующий установленному на персональном компьютере видеоадаптеру. Для выбора драйвера можно воспользоваться функцией detectgraph, которая тестирует аппаратуру видеоадаптера и автоматически выбирает необходимый драйвер и графический режим:

void detectgraph ( int far *graphdriver, int far *graphmode);

Эта функция через свои аргументы возвращает номер графического драйвера, обслуживающего обнаруженный ею дисплейный адаптер, и номер графического режима, обеспечивающего максимальное для данного адаптера разрешение. Возвращенные функцией detectgraph значения в дальнейшем могут быть переданы функции инициализации графической системы initgraph. Функция initgraph ищет на диске bgi-файл, содержащий требуемый драйвер, загружает и инициализирует соответствующий драйвер, переводит систему в графический режим и передает контроль вызванной программе. Прототип этой функции

void initgraph(int far *driver, int far *mode, char far *pathtodriver);

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

Если по указателю *driver перед вызовом было записано значение DETECT (или 0), то сначала запускается процедура автоматического тестирования аппаратуры видеоадаптера. В этом случае нет необходимости вызывать функцию detectgraph. Всю работу, связанную с переходом в графический режим, выполнит функция initgraph.

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

Пример:

#include <graphics.h> //подключение библиотеки графических

//средств

main()

{

int Driver, Mode;

Driver=DETECT;

initgraph(&Driver, &Mode, '' '');

…

closegraph();

return 0;

}

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

Функция closegraph() освобождает память от драйвера и восстанавливает исходный видеорежим.

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

void far restorecrtmode(void);

void far setgraphmode(int mode);

Восстановить прежний графический режим можно, если запомнить его номер. Это можно сделать с помощью функции getgraphmode:

int far getgraphmode(void);

Эта функция возвращает текущее значение номер графического режима для активизированного драйвера.