С для профессиональных программистов




Сохранение и загрузка графических изображений


Сохранение и загрузка графических изображений является довольно простым делом, т.к. образ изображений находится в видеопамяти дисплея, а ее содержимое легко копировать на дисковый файл. Главной проблемой является необходимость введения пользователем имени файла, ввиду того, что запрос о вводе и введенное имя файла сотрут часть информации на экране. Для того, чтобы избежать этого, разработаны функции save_pic() и load_pic(), тексты которых приводятся в данном разделе. Первая функция сохраняет 14 верхних строк изображения, чистит эту область, запрашивает имя файла и, после того, как оно будет введено, восстанавливает изображение.

/* сохранение  графического изображения */

void save_pic()

char fname[80];

FILE *fp; register int i,j;

char far *ptr=(char far *) 0xB8000000; /* точка в памяти   CGA  */

char far *temp;

unsigned char buf[14][80]; /* содержит образ экрана */

temp=ptr;

/* сохранение верхних строк текущего содержимого экрана */

for (i=0;i<14;++i)

for (j=0;j<80;++j)

buf[i][j]=*temp; /* четный байт */

buf[i][j+1]=*(temp+8152); /* нечетный байт */

*temp=0; *(temp+8152)=0; /* чистка позиций экрана */

temp++;

goto_xy(0,0);

printf("Имя файла:");

gets(fname);

if (!(fp=fopen(fname,"wb")))

printf("Фвайл не может быть открыт\n");

return;

temp=ptr;

/* восстановление содержимого экрана */

for (i=0;i<14;++i)

for (j=0;j<80;++j)

*temp= buf[i][j]; /* четный байт */

*(temp+8125)=buf[i][j+1]; /* нечетный байт */

*temp=0; *(temp+8152)=0; /* чистка позиций экрана */

temp++;

/* копирование изображения в файл  */

for (i=0;i<8152;i++)

putc(*ptr,fp); /* четный байт */

putc(*(ptr+8125),fp); /* нечетный байт */

ptr++;

fclose(fp);

/* загрузка изображения */

void load_pic()

char fname[80];

FILE *fp; register int i,j;

char far *ptr=(char far *) 0xB8000000; /* точка в памяти   CGA  */

char far *temp;

unsigned char buf[14][80]; /* содержит образ экрана */




Содержание  Назад  Вперед