- 注册时间
- 2004-10-31
- 最后登录
- 1970-1-1
|
这是我以前做的,本来准备做个功能比较全的图片管理软件,后来中断了,现在基本上不碰wqx了,不过还是想把这个源程序发给大家共享,相信对新手会有帮助!- int picnum,jx,jy,jdx,jdy; //截图的位置、大小
- char dataf[10]={0,0,0,0,0,1,0,24,0,0};
- char datam[7]={0,0,0,0,24,0,0};
- char datar[3]={0,0,0};
- char zhushi[11]={47,47,205,188,208,206,179,223,180,231,58};
- char chenghao[2]={161,193};
- char ox[2]={48,120};
- char huiche[2]={13,10};
- char douhao[2]={44};
- char s[16]={48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102}; //生成txt所需数据
- char jietudata[1600]; //截图字串
- char linshidata[1600]; //截图时的临时字串,用于移动缓冲区图像
- char keepscr[1600]; //getpic()时,先保存屏幕数据,以防止修剪掉多余边后无法恢复屏幕缓冲区数据
- int getpic(char jjx,char jjy,char jjdx,char jjdy) //取得截图区域的数据
- {int xnum;
- char gx1,gx2;
- GetBlock(0,0,160,80,0,keepscr); //保护屏幕
- gx1=jjx-jjx%8;
- gx2=(jjx+jjdx)-(jjx+jjdx)%8+8;
- if (jjx%8!=0) Block(gx1,jjy,jjx-1,jjy+jjdy,0);
- if ((jjx+jjdx)%8!=7) Block(jjx+jjdx+1,jjy,gx2-1,jjy+jjdy,0); //修去多余的边
- GetBlock(gx1,jjy,gx2-gx1,jjdy+1,0,linshidata);
- ClearScreen();
- WriteBlock(gx1-jjx%8,jjy,gx2-gx1,jjdy+1,1,linshidata); //将图形移动,以满足8倍x坐标的截图需要
- if(jjx%8+7-(jjx+jjdx)%8>=8){GetBlock(gx1,jjy,gx2-gx1-8,jjdy+1,0,jietudata);xnum=(gx2-gx1-8)/8;}
- else {GetBlock(gx1,jjy,gx2-gx1,jjdy+1,0,jietudata);xnum=(gx2-gx1)/8;} //判断是否需要排除多余的一列(休边的横向点之和〉8)
- WriteBlock(0,0,160,80,1,keepscr); //恢复屏幕缓冲区
- return xnum;
- }
- void jietu() //屏幕截图控制
- {char ch;
- int xnum; //截图的x方向的字节数
- jx=70;jy=30;jdx=19;jdy=19;
- Box(jx,jy,jx+jdx,jy+jdy,0,2);
- while(1)
- {ch=getchar();
- if(ch==27){break;}
- if(ch==13){Box(jx,jy,jx+jdx,jy+jdy,0,2);Box(jx,jy,jx+jdx,jy+jdy,1,2);xnum=getpic(jx,jy,jdx,jdy);picnum=xnum*(jdy+1);Box(jx,jy,jx+jdx,jy+jdy,1,2);break;}
- else{Box(jx,jy,jx+jdx,jy+jdy,0,2);
- if(ch==20&&jy>0){jy=jy-1;}
- else if(ch==21&&jy+jdy<79){jy=jy+1;}
- else if(ch==22&&jx+jdx<159){jx=jx+1;}
- else if(ch==23&&jx>0){jx=jx-1;}
- else if(ch==111&&jdy>1){jdy=jdy-1;}
- else if(ch==108&&jy+jdy<79){jdy=jdy+1;}
- else if(ch==105&&jdx>1){jdx=jdx-1;}
- else if(ch==112&&jx+jdx<159){jdx=jdx+1;}
- else{Beep();}
- Box(jx,jy,jx+jdx,jy+jdy,0,2);}
- }
- }
- void readsbmp() //读取160*80bmp图(readsbmp为小图,readbbmp为大图)
- {int i;
- int j;
- char fp;
- char picdata[1600];
- fp=fopen("/我的图片/HotSoft.bmp","r");
- fseek(fp,62,0);
- fread(picdata,1,1600,fp);
- WriteBlock(0,0,160,80,1,picdata);
- XDraw(5);
- Refresh();
- }
- void cretxt() //生成txt文件
- {char fp;
- char flen[2]; //生成文件的大小
- int filelen,i,x,a,b,aa,bb;
- filelen=45+picnum*5; //24+20+picnum*5-1+2;
- flen[0]=45+picnum*5;
- flen[1]=filelen/256;
- fp=fopen("/文本文件/截图数据.txt","w");
- fwrite(dataf,1,10,fp);
- fwrite(flen,1,2,fp);
- fwrite(datam,1,7,fp);
- fwrite(flen,1,2,fp);
- fwrite(datar,1,3,fp);
- fwrite(zhushi,1,11,fp);
- fwrite(s+(jdx+1)/100,1,1,fp);
- fwrite(s+((jdx+1)%100)/10,1,1,fp);
- fwrite(s+((jdx+1)%100)%10,1,1,fp);
- fwrite(chenghao,1,2,fp);
- fwrite(s+(jdy+1)/10,1,1,fp);
- fwrite(s+(jdy+1)%10,1,1,fp);
- fwrite(huiche,1,2,fp);
- for(i=1;i<=picnum;i++)
- {fwrite(ox,1,2,fp);
- x=jietudata[i-1];
- while(1)
- {bb=x/16;
- b=x-bb*16;
- aa=b/16;
- a=bb-aa*16;
- fwrite(s+a,1,1,fp);
- fwrite(s+b,1,1,fp);
- break;
- }
- if(i==picnum){fwrite(huiche,1,2,fp);break;}
- fwrite(douhao,1,1,fp);
- }
- fclose(fp);
- }
- void main()
- {ClearScreen();
- TextOut(30,20,"屏幕抓图",1);
- Refresh();
- getchar();
- readsbmp();
- jietu();
- cretxt();
- ClearScreen();
- TextOut(30,20,"截图成功",1);
- Refresh();
- getchar();
- }
复制代码 |
|