ЗАГРУЗКА ГРАФИЧЕСКОГО ДРАЙВЕРА. Программирование на Си/С


Добавил:DMT
Дата создания:28 июня 2008, 22:27
Дата обновления:28 июня 2008, 22:51
Просмотров:18276 последний сегодня, 5:26
Комментариев: 0
ЗАГРУЗКА ГРАФИЧЕСКОГО ДРАЙВЕРА

Среди функций настройки графического режима следует выделить следующие:

 

void far detectgraph(int far *gdriver, int far *gmode);

void far initgraph(int far *gdriver, int far *gmode,

char far *pathdriver).

Функция detectgraph предназначена для определения типа графического адап­тера. Эта функция возвращает значения по адресам, указанным первым и вторым пара­метрами. Здесь gdriver - указатель на целое число, содержащее номер графического драйвера. Например, для CGA этот номер будет равен 1, для EGA - 3, для VGA - 9, для Hercules - 7. Можно придавать значения с помощью констант, описанных в graphics.h , как CGA = 1, EGA = 3, HERCMONO = 7 и VGA = 9. Вторым параметром функции detectgraph будет указатель на целое число, содержащее номер графического режима, обеспечивающего максимальную разрешающую способность экрана. Если нет графического адаптера, то функция detectgraph присваивает *gdriver = -2.

Функция initgraph предназначена для загрузки графического драйвера, имеющего номер *gdriver , и для установки графического режима номер *gmode. Если по адресу gdriver записан нуль (*gdriver=DETECT) , то функция вначале обращается к функции detectgraph , а затем загружает драйвер, номер которого был установлен функцией detectgraph . (При этом устанавливается наибольший из возможных номеров режимов.) Необхо­димая память для загрузки драйвера предоставляется в "куче". В зависимости от графического режима максимальная разрешающая способность экрана равна

 

для адаптера CGA:

CGACi=i (i=0,1,2,3) - 320x200; CGAHI=4 – 640x200;

 

для адаптера EGA :

EGALO=0 - 640x200, EGAHI=1 - 640x350;

 

для адаптера VGA :

VGALO=0 - 640x200, VGAMED=1 - 640x350, VGAHI=2 - 640x480.

 

Для выгрузки графического драйвера применяется функция, объявленная как void closegraph(void). Эта функция освобождает память из "кучи", занятую графическим драйвером.

Чтобы вычислить разрешающую способность экрана по x и y, применяются функции int  getmaxx(void), int  getmaxy(void).

Пример В данном примере номеру графического драйвера придается значение EGA=3 , номеру графического режима - EGALO=0 . Определяются разрешающие способности по x и y.

Код на C++
  1. #include <stdio.h>
  2. #include <graphics.h>
  3. #include <conio.h>
  4.  
  5. void main()
  6. {
  7. int gdriver = EGA, gmode = EGALO;
  8. int maxx, maxy;
  9. initgraph (&gdriver, &gmode, "");
  10. maxx = getmaxx();
  11. maxy = getmaxy();
  12. closegraph();
  13. printf("maxx = %d , maxy = %d \n", maxx, maxy);
  14. }
При использовании обязательна ссылка на http://DMTSoft.ru

После запуска данной программы на экран будет выдано сообщение: maxx = 639, maxy = 199.

Модули драйвера можно преобразовать в объектный файл с помощью утилиты BGIOBJ.EXE. Затем полученный объектный файл подши­вается к программе с помощью указания имени объектного файла в проекте (после имени главного модуля). В этом случае перед инициализацией графического режима следует вызвать функцию int registerbgidriver (void (*driver) (void)) подтверждения графического драйвера.

Пример После команды BGIOBJ С:\BC\BGI\EGAVGA будет создан файл EGAVGA.OBJ. Теперь надо включить имя EGAVGA.OBJ в проект .prj . Инициализация графического режима производится следующим образом:

Код на C++
  1.  
  2. #include <stdio.h>
  3. #include <graphics.h>
  4. #include <conio.h>
  5.  
  6. void main(){
  7. int driver, mode;driver=registerbgidriver(EGAVGA_driver);
  8. driver = VGA; mode = VGAHI;
  9. initgraph (&driver, &mode, "");
  10. closegraph();
  11. }
При использовании обязательна ссылка на http://DMTSoft.ru

После установки графического режима с помощью initgraph экран монитора представляет собой прямоугольную область, разбитую на (getmaxx()+1) ? (getmaxy()+1) одинаковых прямоугольников - пикселов, стороны которых параллельны верхней и нижней границам экрана. Слово пиксел ( pixels ) образовалось от слияния двух английских слов: picture и elemets . Под пикселом понимается минимальный элемент изображения на экране, состоящий из нескольких (цветных) точек и рассматриваемый в программе как одна точка определенной яркости или цвета. Под координатами пиксела подразумеваются целочисленные координаты центров этих прямоугольников, отсчитываемые от координат центра левого верхнего прямоугольника. Координаты пикселов (X,Y) изменяются в диапазонах 0  ?  X  ?  getmaxx(), 0  ?  Y  ?  getmaxy().

Графические функции, с которыми мы можем работать после установки графического режима, условно можно разделить на три группы. Первая группа состоит из функций, которые ничего не выводят на экран, но устанавливают некоторые параметры. Например, функция setcolor задает номер цвета для дальнейшего вывода линий. Вторая группа состоит из функций, которые осуществляют вывод на экран. Чтобы вывести точку заданного цвета, применяется функция void putpixel(int x, int y, int color). Третья группа состоит из функций, которые ничего не выводят на экран, но позволяют получить информацию о выведенном изображении. Например, для чтения цвета пиксела предназначена функция unsigned getpixel(int x, int y). Имена функций первой группы начинаются, как правило со слова set (ставить, помещать), а функции третьей группы – со слова get (получать, доставать).

Графические функции производят вывод в страницу, которая называется активной.

Коэффициентом сжатия экрана называется отношение ширины пиксела к высоте пиксела. Коэффициент сжатия можно узнать с помощью функции void getaspectratio(int far *xasp, int far *yasp). Эта функция записывает по адресу yasp число 10000, а по адресу xasp - произведение коэффициента сжатия на 10000.

Коэффициент сжатия учитывается при выводе окружностей, дуг окружностей и секторов круга. Коэффициент сжатия устанавливается при инициализации графического режима, исходя из режима, соответствующего максимальной разрешающей способности экрана, и может быть изменен с помощью функции void setaspectratio(int xasp, int yasp); в этом случае новым коэффициентом сжатия будет отношение xasp / yasp .

up