#include "process.h"
#include "stdlib.h"
#include "stdio.h"
#include "graphics.h"
#include "conio.h"
void save_all(char *filename) /*保存全屏子函数*/
{
FILE *fp;
unsigned long size =imagesize(0,0,639,120); /*设置屏幕1/4大小单位保存尺寸*/
unsigned long save_1;
int save_i;
char *buffer;
fp=fopen(filename,"wb");/*新建或者打开图形数据文件*/
buffer=(char *)malloc(size);/*申请1/4屏幕大小空间*/
for(save_i=0;save_i<4;save_i++)/*分4次保存屏幕*/
{
save_1=38726L*save_i;/*计算文件内偏移*/
fseek(fp,save_1,SEEK_SET);/*文件内偏移定位*/
getimage(0,120*save_i,639,120*(save_i+1),buffer);/*取屏幕内容到内存*/
fwrite(buffer,size,1,fp);/*将内存数据写入文件*/
}
free(buffer);/*释放内存*/
fclose(fp);
}
void load_all(char *filename) /*恢复全屏子函数*/
{
FILE *fp;
unsigned long size=imagesize(0,0,639,120);
unsigned long load_1;
int load_i;
char *buffer;
if((fp=fopen(filename,"rb"))==NULL)
{
setcolor(12);
outtextxy(450,460,"<File not found!>");
fclose(fp);
return;
}
buffer=(char *)malloc(size);/*申请1/4屏幕的内存*/
for(load_i=0;load_i<4;load_i++) /*分4次恢复图象到屏幕*/
{
load_1=38726L*load_i;/*文件内偏移定位*/
fseek(fp,load_1,SEEK_SET);/*文件内偏移定位*/
fread(buffer,size,1,fp);/*将文件内数据读取到内存*/
putimage(0,120*load_i,buffer,COPY_PUT);/*将内存数据显示到屏幕*/
}
free(buffer);/*释放内存*/
fclose(fp);
}
void main()
{
int driver=DETECT,mode=0,i;
initgraph(&driver,&mode,"");
randomize();
for(i=0;i<100;i++)
setcolor(rand()%16);
circle(rand()%getmaxx(),rand()%getmaxy(),rand()%100);
save_all("screen.dat");
getch();
cleardevice();
getch();
load_all("screen.dat");
getch();
closegraph();
}
这段代码中有几个地方我不理解
主要就是保存屏幕图象时候的 计算文件内的偏移 这个是怎么回事呢?
for(save_i=0;save_i<4;save_i++)/*分4次保存屏幕*/
{
save_1=38726L*save_i;/*计算文件内偏移*/
fseek(fp,save_1,SEEK_SET);/*文件内偏移定位*/
getimage(0,120*save_i,639,120*(save_i+1),buffer);/*取屏幕内容到内存*/
fwrite(buffer,size,1,fp);/*将内存数据写入文件*/
}
主要解释一下这里就行了 非常感谢