Справочник по C/C++
getimage()

#include

void far  getimage()

Параметры

int left начальная координата по горизонтали
int top начальная координата по вертикали
int right конечная координата по горизонтали
int bottom конечная координата по вертикали
void far *bitmap область в которую будет происходить копирование

Описание

Запоминает в битовый образ некоторой области экрана

Ф. копирует образ c экрана в память. left, top, right и bottom определяют область экрана прямоугольной формы, которая будет скопирована. bitmap указывает на область в памяти, куда записывается битовый образ. Первые два слова этой области задают ширину и высоту прямоугольника, оставшиеся определяют сам образ.

#include 
#include 
#include 
#include 
#include 

void save_screen(void far *buf[4]);
void restore_screen(void far *buf[4]);
int maxx,maxy;

int main(void)
{
    int graphdriver = DETECT, gmode, errorcode;
    void far *ptr[4];

    /*инициализация графического режима*/
    initgraph(&graphdriver,&gmode,"");
    errorcode = graphresult();
    if(errorcode != grOk)  /* если ошибка */
    {
        printf("Ошибка :%s\n",grapherrormsg(errorcode));
        printf("Для останова нажмите любую клавишу\n");
        getch();
        exit(1);  /* завершение с кодом ошибки */
    }
    
    maxx = getmaxx();
    maxy = getmaxy();

    /* нарисовать на экране изображение */
    rectangle(0,0,maxx,maxy);
    line(0,0,maxx,maxy);
    line(0,maxx,maxy,0)
    
    save_screen(ptr);    //сохранить экран
    getch();
    cleardevice();        //обнуление экрана
    restore_screen(ptr);    //восстановление экрана
    getch();

    closegraph();
    return 0;
}

void save_screen(void far *buf[4])
{
    unsigned size;
    int ystart=0,yend,yincr,block;
    yincr = (maxy+1)/4;
    yend = yincr;
    size = imagesize(0,ystart,maxx,yend);    //получить размер изображения в байтах
    for(block = 0; block<=3; block++)
    {
        if(buf[block] = farmalloc(size))== NULL)
        {
            closegraph();
            printf("Ошибка! Не хватает памяти для сохранения экрана\n");
            exit(1);
        }
        getimage(0,ystart,maxx,yend,buf[block]);
        ystart = yend+1;
        yend += yincr+1;
    }
}
void restore_screen(void far *buf[4]);
{
    int ystart=0,yend,yincr,block;
    yincr = (maxx+1)/4;
    yend = yincr;
    for(block=0;block<=3;block++)
    {
        putimage(0,ystart,buf[block],COPY_PUT);
        farfree(buf[block]);
        ystart = yend+1;
        yend += yincr+1;
    }
}

Смотрите также

imagesize() — возвращает количество байтов, требуемых для хранения битового образа
putimage() — помещает на экран ранее записанный в память образ