msdos批处理文件:用DOS批处理来做数字图像处理

前言:我最近对语言挺着迷很想学习编译原理询问了老师才知道我们已经取消了这么课程(他们觉得学了没用) 时间也没找到什么好教材如果有好心朋友可以推荐几本有关编译原理经典书籍感激不尽!

图灵机是由输入、输出和状态转移 3要素组成广义上自动机模型理论上讲任何任何完备图灵机语言都可用于通用编程并且和其他完备图灵机语言样有效但实际上有些此类语言作用在其特定领域的外时可能令人非常痛苦例如m4是种有意完备图灵机但实战中把m4当作通用语言使用则非常困难

最近对些计算机语言进行分析整理总结门最简单可编程语言也应该具备:

  • 输入输出获得待处理数据可以是从标准输入输出也可以从文件;
  • 算数运算计算机核心当然是“计算”就是普通计算机上提供加减乘除运算;
  • 内存管理:临时变量值获取和存储管理其实有点像通过变量名来查找值Hash表(这在DOS批处理中体现很到位);
  • 按条件跳转:拥有条件判断(test)加上语句跳转(jump)就能模拟出、while、for和goto等语句(其中goto条件为永真就执行“test(true) jump xxx”样)
按照上面说法解释器很像是个功能加强了计算器(原来写个计算器也这么不容易以前低估它了T_T)纵观周围工 具很多看似简陋小工具原来都符合上面要求像UNIX里命令行计算器bc(1)/dc(1)都是完备图灵机;DOS批处理同样也具备下面来详细讨论

批处理中可以用 给变量赋值; /a 可以进行算数运算在命令行中执行 /? 可以查看所有支持运算符;另外还有、for、call、goto等语句支持跳转; /p 和echo 可以实现从键盘和屏幕上输出文本信息但对 2进制文件操作显得有点力不从心(可以用debug 来实现但貌似 挺复杂)所以我用C语言写了两个小(Bmp2Txt和Txt2Bmp可到子清行下载 2进制文件和C语言源码)解决批处理对BMP文件输入输出下面是我用这两个小工具写拉普拉斯算子求边缘检测批处理源码:



view plaincopy to clipboardpr?

    ="dp-cpp">
  1. ="alt">::用拉普拉斯算子来做边缘检测
  2. ="">@echooff
  3. ="alt">localenabledelayedexpansion
  4. ="">="keyword">not="">"%~x1"="">".bmp"="keyword">gotoerror
  5. ="alt">="keyword">not="">"%~x2"="">".bmp"="keyword">gotoerror
  6. ="">
  7. ="alt">Bmp2Txt%1$$temp$$.txt
  8. ="">::将BMP像素集合保存到数b
  9. ="alt">callTxt2Arrayb<$$temp$$.txt
  10. ="">
  11. ="alt">t.width=!b.width!
  12. ="">t.height=!b.height!
  13. ="alt">="keyword">for/l%%yin(0,1,!b.height!)="keyword">do(
  14. ="">="keyword">for/l%%xin(0,1,!b.width!)="keyword">do(
  15. ="alt">ny=%%y
  16. ="">nx=%%x
  17. ="alt">call:calc
  18. ="">)
  19. ="alt">)
  20. ="">
  21. ="alt">::将转换成文本文件
  22. ="">callArray2Txtt>$$temp$$.txt
  23. ="alt">Txt2Bmp%2$$temp$$.txt
  24. ="">del/q$$temp$$.txt
  25. ="alt">="keyword">gotoend
  26. ="">
  27. ="alt">::Functions
  28. ="">:error
  29. ="alt">echo.&echo usage:%0Input_BMP_FileOutput_BMP_File
  30. ="">="keyword">gotoend
  31. ="alt">
  32. ="">:calc
  33. ="alt">/at[%ny%][%nx%]=4*!b[%ny%][%nx%]!
  34. ="">
  35. ="alt">/ady=%ny%-1
  36. ="">/adx=%nx%
  37. ="alt">="keyword">db[%dy%][%dx%]/at[%ny%][%nx%]-=!b[%dy%][%dx%]!
  38. ="">
  39. ="alt">/ady=%ny%+1
  40. ="">/adx=%nx%
  41. ="alt">="keyword">db[%dy%][%dx%](/at[%ny%][%nx%]-=!b[%dy%][%dx%]!)
  42. ="">
  43. ="alt">/ady=%ny%
  44. ="">/adx=%nx%-1
  45. ="alt">="keyword">db[%dy%][%dx%](/at[%ny%][%nx%]-=!b[%dy%][%dx%]!)
  46. ="">
  47. ="alt">/ady=%ny%
  48. ="">/adx=%nx%+1
  49. ="alt">="keyword">db[%dy%][%dx%](/at[%ny%][%nx%]-=!b[%dy%][%dx%]!)
  50. ="">
  51. ="alt">="keyword">goto:eof
  52. ="">
  53. ="alt">:end



在我机子上跑了两分钟居然也跑出结果来了相应效果图如下

原始图:原始图

处理后图片:Laplace处理后<img src='/icons/84739de.gif' />图片

Tags:  dos批处理文件 dos批处理命令 dos批处理 msdos批处理文件

延伸阅读

最新评论

发表评论