当前位置: 代码迷 >> C语言 >> 请教!怎样在TC图形编程环境下截取运行结果图!
  详细解决方案

请教!怎样在TC图形编程环境下截取运行结果图!

热度:110   发布时间:2006-01-18 11:28:00.0
请教!怎样在TC图形编程环境下截取运行结果图!

用TC进行图形编程,运行时用printscreen无法截获图片,
用截图软件HyperSnap-DX 5也截取不到运行结果的图片,
为什么呢?请各位大虾指点。该用什么方法解决呢?

搜索更多相关的解决方案: 图形  环境  结果  运行  

----------------解决方案--------------------------------------------------------
运行调试的环境是:

操作系统:Microsoft Windows XP Professional Service Pack 2

编辑环境:EditPlus v2.21

编译环境:Turbo C 2.0


----------------解决方案--------------------------------------------------------
我知道一个办法就是自己在程序内部写一个函数,将屏幕上的内容输入文件中,用BMP的格式来写。
----------------解决方案--------------------------------------------------------
谢谢3楼的大虾,我在Windows 98下调试,可以用Printscreen截图了!
----------------解决方案--------------------------------------------------------
郁闷啊......
完全看不懂.......
----------------解决方案--------------------------------------------------------


/*这里有两个可以保存和打开程序运行中部分屏幕或全屏图形的函数*/

用法: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编辑过]


----------------解决方案--------------------------------------------------------
思路是不错的~~~惯例顶一下
不过下次在贴之前请麻烦先自己编译通过再贴~谢谢
----------------解决方案--------------------------------------------------------
  相关解决方案