Для инициализации графического режима используется функция: INITGRAPT ().
Её прототип VOID INITGRAPT(INT FAR *DRAVER, INT FAR *MODE, CHAR FAR *PATH)
Эта функция считывает в память соответствующий драйвер, устанавливает соответствующий аргументу MODE режим и определяет путь к каталогу, в котором находится соответствующий драйвер (файл с расширением BGI). Если путь не указан, то предполагается, что драйвер находится в текущем каталоге.
Пример: INT driver = DETECT, MODE, EVICODE
Макрос DETECT – задает автоматическое определение типа видеоадаптера и выбора соответствующего драйвера во время выполнения программы. Это позволяет переносить без труда изменения программы на компьютере с другими видеоадаптерами.
INITGRAPH (& DRIVER, &MODE, “D:\\BGI”);
EVICODE = graphresult();
IF (EVICODE! = 0) /*произошла ошибка*/
{
PRINTF (“Ошибка: %s ”, grapherrormsg(EVICODE));
/* функция grapherrormsg() – возвращает строку с сообщением по заданному коду ошибки*/
}
EXIT (1); /* завершение работы программы */
ELSE
- - - - }
п. 19. Работа с образами экрана.
Иногда требуется все изображение или фрагмент экрана запомнить и затем воспроизвести. Это бывает необходимо для создания движущихся изображений, отображение графического курсора и т.д. Для работы с образами экрана рекомендуется следующая последовательность действий:
1. Определить размер области памяти для хранения изображения, используя функцию IMAGESIZE ().
Её прототип: UNSIGNET FAR IMAGESIZE (INT LEFT, INT TOP, INT RIGHT, INT BOTTOM) - возвращает объем буфера, нужного для сохранения графической информации окна экрана с заданными координаты.
2. Выделить область памяти для хранения образа, например, используя функцию MALLOC.
3. Сохранить изображение, заключенное в прямоугольной области, в буфере, используя функцию:
VOID FAR GETIMAGE (INT LEFT, INT TOP, INT RIGHT, INT BOTTOM, VOID FAR *BUF); - сохранение в области памяти, на которую указывает указатель BUF, образ экрана заданный координатами.
4. Восстановить изображение в любом месте экрана, используя вызов функции: PUTIMAGE ()
VOID FAR PUTIMAGE (INT LEFT, INT TOP, VOID FAR *BUF, INT OP); - вывод ранее сохраненного графического изображения в окно экрана с левым верхним углом (LEFT, TOP). ОР – параметр определяющий способ вывода образа на экран. Этот параметр может принимать одно из следующих значений:
- 0 – означает, что каждый пиксель (бит) изображения из области памяти будет пересылаться на экран.
- 1 – означает, что при пересылке на экран между битами образа и битами экрана выполняется логическая операция “исключающая или” (XOR).
- 2 - означает, что при пересылке на экран между битами образа и битами экрана выполняется логическая операция “или”.
- 3 - означает, что при пересылке на экран между битами образа и битами экрана выполняется логическая операция “и”.
- 4 - означает, что при пересылке на экран между битами образа и битами экрана выполняется логическая операция “не” (негатив).
За счет использования различных операций можно различным образом восстанавливать изображение на экране. Очевидно, что применение операции XOR(1) к той же позиции экрана, где был заполнен образ, приведет к исчезновению изображения. Это операция часто используется для создания движущихся изображений.
Пример: Рисуем движущейся круг на экране.
#include<math.h>
#include<graphics.h>
#define R 20
#define Sx 20
#define Sy 20
main()
{
int driver = DETECT, mode,evicode;
int size,i,j;
void *p;
initgraph(&driver,&mode," ");
evicode= graphresult();
if (evicode == 0)
{
pieslice(Sx,Sy,0,360,R); //закрашенный круг
// сохраняем изображение
size = imagesize(Sx-R,Sy-R,Sx+R,Sy+R);
p = malloc(size);
// сохранили
getimage(Sx-R,Sy-R,Sx+R,Sy+R,p);
// выполняем движение
i=j=20;
do
{
putimage(i-R,j-R,p,1); // стереть изображение
i+=6;
j+=3;
putimage(i-R,j-R,p,0); // в любом месте
delay(100);
}
while(i<600);
getch();
free(p);
}
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.