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

#include

void far  putimage()

Параметры

int left левая координата вставляемого образа
int top верхняя координата вставляемого образа
const void far *bitmap область из которой будет происходить вставка
int op оператор для заполнения для вставки

Описание

Помещает на экран ранее записанный в память образ

Ф. помещает на экран ранее записанный образ функцией getimage() образ. bitmap указывает на область в памяти, откуда записывается битовый образ. Первые два слова этой области задают ширину и высоту прямоугольника, оставшиеся определяют сам образ.

op задаёт оператор заполнения. В заголовочном файле graphics.h определенны следующие операторы.

enum putimage_ops {
    COPY_PUT,    //MOV
    XOR_PUT,    //XOR
    OR_PUT,        //OR
    AND_PUT,    //AND
    NOT_PUT        //NOT
};

Пример.

#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;
    }
}


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

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