易码技术论坛

 找回密码
 加入易码
搜索
查看: 282951|回复: 4

[源码] [原创][源程序学习]屏幕截图并直接生成txt文件的源程序

[复制链接]
发表于 2006-9-7 17:23:57 | 显示全部楼层
这个程序支持在文曲星上直接截取图像并将图像数据转化为txt文件,方便在星星上编程的人。
读取的图形为160*80的bmp图。
发表于 2006-9-7 18:08:47 | 显示全部楼层
星星绘图 + E路克
基本上可实现上述功能~
发表于 2006-9-9 00:59:38 | 显示全部楼层
汗…
看标题我还以为是星端的OCR呢~(没拼错吧,记不准了)
发表于 2006-9-15 20:55:40 | 显示全部楼层
开源能让大家学,不错。
 楼主| 发表于 2006-9-7 17:20:34 | 显示全部楼层 |阅读模式
这是我以前做的,本来准备做个功能比较全的图片管理软件,后来中断了,现在基本上不碰wqx了,不过还是想把这个源程序发给大家共享,相信对新手会有帮助!
  1. int picnum,jx,jy,jdx,jdy; //截图的位置、大小
  2. char dataf[10]={0,0,0,0,0,1,0,24,0,0};
  3. char datam[7]={0,0,0,0,24,0,0};
  4. char datar[3]={0,0,0};
  5. char zhushi[11]={47,47,205,188,208,206,179,223,180,231,58};
  6. char chenghao[2]={161,193};
  7. char ox[2]={48,120};
  8. char huiche[2]={13,10};
  9. char douhao[2]={44};
  10. char s[16]={48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102}; //生成txt所需数据
  11. char jietudata[1600]; //截图字串
  12. char linshidata[1600]; //截图时的临时字串,用于移动缓冲区图像
  13. char keepscr[1600]; //getpic()时,先保存屏幕数据,以防止修剪掉多余边后无法恢复屏幕缓冲区数据
  14. int getpic(char jjx,char jjy,char jjdx,char jjdy) //取得截图区域的数据
  15. {int xnum;
  16. char gx1,gx2;
  17. GetBlock(0,0,160,80,0,keepscr); //保护屏幕
  18. gx1=jjx-jjx%8;
  19. gx2=(jjx+jjdx)-(jjx+jjdx)%8+8;
  20. if (jjx%8!=0) Block(gx1,jjy,jjx-1,jjy+jjdy,0);
  21. if ((jjx+jjdx)%8!=7) Block(jjx+jjdx+1,jjy,gx2-1,jjy+jjdy,0); //修去多余的边
  22. GetBlock(gx1,jjy,gx2-gx1,jjdy+1,0,linshidata);
  23. ClearScreen();
  24. WriteBlock(gx1-jjx%8,jjy,gx2-gx1,jjdy+1,1,linshidata); //将图形移动,以满足8倍x坐标的截图需要
  25. if(jjx%8+7-(jjx+jjdx)%8>=8){GetBlock(gx1,jjy,gx2-gx1-8,jjdy+1,0,jietudata);xnum=(gx2-gx1-8)/8;}
  26. else {GetBlock(gx1,jjy,gx2-gx1,jjdy+1,0,jietudata);xnum=(gx2-gx1)/8;} //判断是否需要排除多余的一列(休边的横向点之和〉8)
  27. WriteBlock(0,0,160,80,1,keepscr); //恢复屏幕缓冲区
  28. return xnum;
  29. }
  30. void jietu() //屏幕截图控制
  31. {char ch;
  32. int xnum; //截图的x方向的字节数
  33. jx=70;jy=30;jdx=19;jdy=19;
  34. Box(jx,jy,jx+jdx,jy+jdy,0,2);
  35. while(1)
  36. {ch=getchar();
  37.   if(ch==27){break;}
  38.   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;}
  39.   else{Box(jx,jy,jx+jdx,jy+jdy,0,2);
  40.      if(ch==20&&jy>0){jy=jy-1;}
  41.      else if(ch==21&&jy+jdy<79){jy=jy+1;}
  42.      else if(ch==22&&jx+jdx<159){jx=jx+1;}
  43.      else if(ch==23&&jx>0){jx=jx-1;}
  44.      else if(ch==111&&jdy>1){jdy=jdy-1;}
  45.      else if(ch==108&&jy+jdy<79){jdy=jdy+1;}
  46.      else if(ch==105&&jdx>1){jdx=jdx-1;}
  47.      else if(ch==112&&jx+jdx<159){jdx=jdx+1;}
  48.      else{Beep();}
  49.      Box(jx,jy,jx+jdx,jy+jdy,0,2);}
  50. }
  51. }
  52. void readsbmp() //读取160*80bmp图(readsbmp为小图,readbbmp为大图)
  53. {int i;
  54. int j;
  55. char fp;
  56. char picdata[1600];
  57. fp=fopen("/我的图片/HotSoft.bmp","r");
  58. fseek(fp,62,0);
  59. fread(picdata,1,1600,fp);
  60. WriteBlock(0,0,160,80,1,picdata);
  61. XDraw(5);
  62. Refresh();
  63. }
  64. void cretxt() //生成txt文件
  65. {char fp;
  66. char flen[2]; //生成文件的大小
  67. int filelen,i,x,a,b,aa,bb;
  68. filelen=45+picnum*5; //24+20+picnum*5-1+2;
  69. flen[0]=45+picnum*5;
  70. flen[1]=filelen/256;
  71. fp=fopen("/文本文件/截图数据.txt","w");
  72. fwrite(dataf,1,10,fp);
  73. fwrite(flen,1,2,fp);
  74. fwrite(datam,1,7,fp);
  75. fwrite(flen,1,2,fp);
  76. fwrite(datar,1,3,fp);
  77. fwrite(zhushi,1,11,fp);
  78. fwrite(s+(jdx+1)/100,1,1,fp);
  79. fwrite(s+((jdx+1)%100)/10,1,1,fp);
  80. fwrite(s+((jdx+1)%100)%10,1,1,fp);
  81. fwrite(chenghao,1,2,fp);
  82. fwrite(s+(jdy+1)/10,1,1,fp);
  83. fwrite(s+(jdy+1)%10,1,1,fp);
  84. fwrite(huiche,1,2,fp);
  85. for(i=1;i<=picnum;i++)
  86. {fwrite(ox,1,2,fp);
  87.   x=jietudata[i-1];
  88.   while(1)
  89.   {bb=x/16;
  90.   b=x-bb*16;
  91.   aa=b/16;
  92.   a=bb-aa*16;
  93.   fwrite(s+a,1,1,fp);
  94.   fwrite(s+b,1,1,fp);
  95.   break;
  96.   }
  97.   if(i==picnum){fwrite(huiche,1,2,fp);break;}
  98.   fwrite(douhao,1,1,fp);
  99. }
  100. fclose(fp);
  101. }
  102. void main()
  103. {ClearScreen();
  104. TextOut(30,20,"屏幕抓图",1);
  105. Refresh();
  106. getchar();
  107. readsbmp();
  108. jietu();
  109. cretxt();
  110. ClearScreen();
  111. TextOut(30,20,"截图成功",1);
  112. Refresh();
  113. getchar();
  114. }
复制代码
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-8-24 06:27 , Processed in 0.009326 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表