用TC进行图形编程,运行时用printscreen无法截获图片,
用截图软件HyperSnap-DX 5也截取不到运行结果的图片,
为什么呢?请各位大虾指点。该用什么方法解决呢?
操作系统:Microsoft Windows XP Professional Service Pack 2
编辑环境:EditPlus v2.21
编译环境:Turbo C 2.0
/*这里有两个可以保存和打开程序运行中部分屏幕或全屏图形的函数*/
用法:Save_dat(0,0,320,240, "123.dat"); /*保存图形*/
Load_dat(100,100,420,340, "123.dat"); /*打开图形*/
其中两个函数中图形的大小尺寸应保持一样
/***************保存图形于视频缓冲区函数*****其中x,y,m,n为要保存图形区域参数*************/
/*该图片最好保存为*.dat格式*/
Save_dat(int x, int y, int m, int n, char *fname)
{
FILE *fp;
char far *ptr=(char far *)0xA0000000l; /*VRAM指针*/
int j,save_f=1;
register i;
unsigned long a;
int k, numbytes;
char *p;
numbytes= (m-x)/8+1;
fp=fopen(fname,"wb"); /*打开二进制文件*/
if(fp==NULL)
{ printf("Open file error!!");
save_f=0; }
if(save_f!=0)
{
for(i=0;i<4;i++)
{ outportb(0x3ce,4); /*送索引号4,选读位面选择寄存器*/
outportb(0x3cf,i); /*选中的位面*/
for(j= y; j<= n; j++) /*38400为满屏图形字节数*/
{ a= addr(x, j);
for(k= 0; k<= numbytes; k++)
putc(ptr[a+k], fp);
}
}
}
fclose(fp);
outportb(0x3cf,0); /*恢复原来的设置*/
}
/****************显示保存在于视频缓冲区图形函数****其中x,y,m,n为要打开图形区域参数**************/
Load_dat(int x, int y, int m, int n, char *fname)
{
FILE *fp;
char far *ptr= (char far *)0xA0000000l; /*VRAM指针*/
int j,save_f=1;
register i;
unsigned long a;
int k, numbytes, r= 1;
char *p;
numbytes= (m-x)/8+1;
fp=fopen(fname,"rb"); /*打开二进制文件*/
if(fp==NULL)
{ printf("Open file error!!");
save_f=0; }
if(save_f!=0)
{
for(i=0;i<4;i++)
{ outportb(0x3c4,2); /*送索引号4,选读位面选择寄存器*/
outportb(0x3c5,r); /*选中的位面*/
for(j= y; j<= n; j++) /*38400为满屏图形字节数*/
{ a= addr(x, j);
for(k= 0; k<= numbytes; k++)
ptr[a+k]= getc(fp);
}
r= r*2;
}
}
fclose(fp);
outportb(0x3c5,0xf); /*恢复位面允许写寄存器原值*/
}
/*********地址转换函数**********/
addr(int x, int y)
{
unsigned long a;
a= 80l*(long)y+(long)x/8l;
return (a);
}
[此贴子已经被作者于2006-2-8 3:24:29编辑过]