`
wangshu3000
  • 浏览: 135830 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

关于BMP图片格式(部分垃圾代码)

阅读更多
java 代码
  1. 做了个刷投票的程序 识别随即码图片的地方用到了BMP图片识别 需要识别出BMP图片里的数字   
  2. 网站的BMP图片格式比较规则  20 * 45 的大小 每个数字大小是 10 * 8  左侧空 5 像素 右侧 5 像素   
  3. 研究BMP图片格式发现 BMP主要包括 3 部分 头 颜色表 图像数据区    
  4. 图像结构如下 类似C++里的结构体   
  5. public   class  BMPHeader {   
  6. public   byte [] bm =  new   byte [ 2 ]; // 2位 BM   
  7.   
  8. public   byte [] size =  new   byte [ 4 ]; // 4位 2038 (f6 07)   
  9.   
  10. public   byte [] save =  new   byte [ 4 ]; // 4位 00   
  11.   
  12. public   byte [] dataPos =  new   byte [ 4 ]; // 4位 图像数据区位置   
  13.   
  14. // (3604)文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)   
  15.   
  16. public   byte [] desSize =  new   byte [ 4 ]; // 4位图像描述信息块大小28h   
  17.   
  18. public   byte [] width =  new   byte [ 4 ]; // 4位 宽度   
  19.   
  20. public   byte [] hight =  new   byte [ 4 ]; // 4位 高度   
  21.   
  22. public   byte [] plane =  new   byte [ 2 ]; // 2位 plane为0100   
  23.   
  24. public   byte [] bytes =  new   byte [ 2 ]; // 2位 图像的位数 0800   
  25.   
  26. public   byte [] zip =  new   byte [ 4 ]; // 4位 压缩方式00不压缩   
  27.   
  28. public   byte [] picSize =  new   byte [ 4 ]; // 4位 c0 03 = 960 图像区数据的大小   
  29.   
  30. public   byte [] shuiPing =  new   byte [ 4 ]; // 4位 水平每米有多少像素   
  31.   
  32. public   byte [] cuiZhi =  new   byte [ 4 ]; // 4位 垂直每米有多少像素   
  33.   
  34. public   byte [] colorNum =  new   byte [ 4 ]; // 4位 此图像所用的颜色数   
  35.   
  36. // 图像数据从436-7f5   
  37. public   byte [] colorTab =  new   byte [ 1028 ];   
  38.   
  39. public   byte [] bmpData =  new   byte [ 960 ];   
  40. }   
  41. 颜色表ColorTab应该为 1024 长 不知道为什么会是 1028  没算明白这里   
  42. 图像数据区是 960 位 每一位都是一个颜色点 保存颜色表中的索引数据  16 进制  3 行表示图像中的一行   
  43. 从下往上排列  45 = 16 * 3 - 3  有 3 位补零 因为bmp要保证每行数据点要为 4 的整数倍   
  44. 得到数据内容就可以根据行列坐标定位每一点的颜色 从而判断出图像中的数字   
  45. import  java.io.File;   
  46. import  java.io.FileInputStream;   
  47. import  java.io.FileNotFoundException;   
  48. import  java.io.IOException;   
  49.   
  50. public   class  BMPTest {   
  51. private   byte [][] parse960ToLine( byte [] bmpData) {   
  52.     int  lineSize =  48 ;   
  53.     int  columnIndex =  0 ;   
  54.     int  rowIndex =  0 ;   
  55.     byte [][] bmp =  new   byte [ 20 ][ 48 ];   
  56.     for  ( int  i =  0 ; i < bmpData.length; i++) {   
  57.     bmp[rowIndex][columnIndex] = bmpData[i];   
  58.     columnIndex++;   
  59.      if  (columnIndex ==  48 ) {   
  60.      rowIndex++;   
  61.      columnIndex =  0 ;   
  62.     }   
  63.    }   
  64.     return  bmp;   
  65. }   
  66.   
  67. private   short  parse1Num( byte [][] theByte) {   
  68.     if  (theByte[ 0 ][ 0 ] ==  0  && theByte[ 0 ][ 1 ] ==  0  && theByte[ 0 ][ 2 ] ==  0   
  69.      && theByte[ 0 ][ 3 ] ==  0  && theByte[ 0 ][ 4 ] ==  0   
  70.      && theByte[ 0 ][ 5 ] ==  0  && theByte[ 0 ][ 6 ] ==  0   
  71.      && theByte[ 0 ][ 7 ] ==  0  && theByte[ 7 ][ 0 ] ==  0   
  72.      && theByte[ 7 ][ 1 ] ==  0  && theByte[ 1 ][ 1 ] ==  0   
  73.      && theByte[ 1 ][ 2 ] ==  0  && theByte[ 2 ][ 2 ] ==  0   
  74.      && theByte[ 2 ][ 3 ] ==  0  && theByte[ 3 ][ 3 ] ==  0   
  75.      && theByte[ 3 ][ 4 ] ==  0  && theByte[ 4 ][ 4 ] ==  0 ) {   
  76.      return   2 ;   
  77.    }  else   if  (theByte[ 0 ][ 0 ] ==  3  && theByte[ 0 ][ 1 ] ==  0   
  78.      && theByte[ 0 ][ 2 ] ==  0  && theByte[ 0 ][ 3 ] ==  0   
  79.      && theByte[ 0 ][ 4 ] ==  0  && theByte[ 1 ][ 0 ] ==  0   
  80.      && theByte[ 1 ][ 1 ] ==  0  && theByte[ 1 ][ 2 ] ==  3   
  81.      && theByte[ 9 ][ 1 ] ==  0  && theByte[ 9 ][ 2 ] ==  0   
  82.      && theByte[ 9 ][ 3 ] ==  0  && theByte[ 9 ][ 4 ] ==  0   
  83.      && theByte[ 9 ][ 5 ] ==  0  && theByte[ 8 ][ 0 ] ==  0   
  84.      && theByte[ 8 ][ 1 ] ==  0  && theByte[ 8 ][ 5 ] ==  0   
  85.      && theByte[ 8 ][ 6 ] ==  0 ) {   
  86.      return   3 ;   
  87.    }  else   if  (theByte[ 0 ][ 1 ] ==  0  && theByte[ 0 ][ 2 ] ==  0   
  88.      && theByte[ 0 ][ 3 ] ==  0  && theByte[ 0 ][ 4 ] ==  0   
  89.      && theByte[ 0 ][ 5 ] ==  0  && theByte[ 0 ][ 6 ] ==  0   
  90.      && theByte[ 0 ][ 3 ] ==  0  && theByte[ 1 ][ 3 ] ==  0   
  91.      && theByte[ 2 ][ 3 ] ==  0  && theByte[ 3 ][ 3 ] ==  0   
  92.      && theByte[ 4 ][ 3 ] ==  0  && theByte[ 5 ][ 3 ] ==  0   
  93.      && theByte[ 6 ][ 3 ] ==  0  && theByte[ 7 ][ 3 ] ==  0   
  94.      && theByte[ 8 ][ 3 ] ==  0  && theByte[ 9 ][ 3 ] ==  0   
  95.      && theByte[ 0 ][ 4 ] ==  0  && theByte[ 1 ][ 4 ] ==  0   
  96.      && theByte[ 2 ][ 4 ] ==  0  && theByte[ 3 ][ 4 ] ==  0   
  97.      && theByte[ 4 ][ 4 ] ==  0  && theByte[ 5 ][ 4 ] ==  0   
  98.      && theByte[ 6 ][ 4 ] ==  0  && theByte[ 7 ][ 4 ] ==  0   
  99.      && theByte[ 8 ][ 4 ] ==  0  && theByte[ 9 ][ 4 ] ==  0 ) {   
  100.      return   1 ;   
  101.    }  else   if  (theByte[ 0 ][ 5 ] ==  0  && theByte[ 1 ][ 5 ] ==  0   
  102.      && theByte[ 2 ][ 5 ] ==  0  && theByte[ 3 ][ 5 ] ==  0   
  103.      && theByte[ 4 ][ 5 ] ==  0  && theByte[ 5 ][ 5 ] ==  0   
  104.      && theByte[ 6 ][ 5 ] ==  0  && theByte[ 7 ][ 5 ] ==  0   
  105.      && theByte[ 8 ][ 5 ] ==  0  && theByte[ 9 ][ 5 ] ==  0   
  106.      && theByte[ 0 ][ 6 ] ==  0  && theByte[ 1 ][ 6 ] ==  0   
  107.      && theByte[ 2 ][ 6 ] ==  0  && theByte[ 3 ][ 6 ] ==  0   
  108.      && theByte[ 4 ][ 6 ] ==  0  && theByte[ 5 ][ 6 ] ==  0   
  109.      && theByte[ 6 ][ 6 ] ==  0  && theByte[ 7 ][ 6 ] ==  0   
  110.      && theByte[ 8 ][ 6 ] ==  0  && theByte[ 9 ][ 6 ] ==  0 ) {   
  111.      return   4 ;   
  112.    }  else   if  (theByte[ 5 ][ 0 ] ==  0  && theByte[ 6 ][ 0 ] ==  0   
  113.      && theByte[ 7 ][ 0 ] ==  0  && theByte[ 8 ][ 0 ] ==  0   
  114.      && theByte[ 9 ][ 0 ] ==  0  && theByte[ 5 ][ 1 ] ==  0   
  115.      && theByte[ 6 ][ 1 ] ==  0  && theByte[ 7 ][ 1 ] ==  0   
  116.      && theByte[ 8 ][ 1 ] ==  0  && theByte[ 9 ][ 1 ] ==  0   
  117.      && theByte[ 9 ][ 2 ] ==  0  && theByte[ 9 ][ 3 ] ==  0   
  118.      && theByte[ 9 ][ 4 ] ==  0  && theByte[ 9 ][ 5 ] ==  0   
  119.      && theByte[ 9 ][ 6 ] ==  0  && theByte[ 2 ][ 6 ] ==  0   
  120.      && theByte[ 3 ][ 6 ] ==  0  && theByte[ 4 ][ 6 ] ==  0   
  121.      && theByte[ 5 ][ 6 ] ==  0  && theByte[ 2 ][ 7 ] ==  0 ) {   
  122.      return   5 ;   
  123.    }  else   if  (theByte[ 2 ][ 0 ] ==  0  && theByte[ 3 ][ 0 ] ==  0   
  124.      && theByte[ 4 ][ 0 ] ==  0  && theByte[ 5 ][ 0 ] ==  0   
  125.      && theByte[ 6 ][ 0 ] ==  0  && theByte[ 7 ][ 0 ] ==  0   
  126.      && theByte[ 1 ][ 1 ] ==  0  && theByte[ 2 ][ 1 ] ==  0   
  127.      && theByte[ 3 ][ 1 ] ==  0  && theByte[ 4 ][ 1 ] ==  0   
  128.      && theByte[ 5 ][ 1 ] ==  0  && theByte[ 6 ][ 1 ] ==  0   
  129.      && theByte[ 7 ][ 1 ] ==  0  && theByte[ 8 ][ 1 ] ==  0 ) {   
  130.      return   6 ;   
  131.    }  else   if  (theByte[ 9 ][ 0 ] ==  0  && theByte[ 9 ][ 1 ] ==  0   
  132.      && theByte[ 9 ][ 2 ] ==  0  && theByte[ 9 ][ 3 ] ==  00   
  133.      && theByte[ 9 ][ 4 ] ==  0  && theByte[ 9 ][ 5 ] ==  0   
  134.      && theByte[ 9 ][ 6 ] ==  0  && theByte[ 9 ][ 7 ] ==  0   
  135.      && theByte[ 8 ][ 7 ] ==  0  && theByte[ 8 ][ 6 ] ==  0   
  136.      && theByte[ 7 ][ 6 ] ==  0  && theByte[ 7 ][ 7 ] ==  0   
  137.      && theByte[ 6 ][ 6 ] ==  0  && theByte[ 6 ][ 5 ] ==  0   
  138.      && theByte[ 5 ][ 5 ] ==  0  && theByte[ 5 ][ 4 ] ==  0   
  139.      && theByte[ 4 ][ 4 ] ==  0 ) {   
  140.      return   7 ;   
  141.    }  else   if  (theByte[ 2 ][ 0 ] ==  0  && theByte[ 3 ][ 0 ] ==  0   
  142.      && theByte[ 7 ][ 0 ] ==  0  && theByte[ 1 ][ 1 ] ==  0   
  143.      && theByte[ 2 ][ 1 ] ==  0  && theByte[ 3 ][ 1 ] ==  0   
  144.      && theByte[ 4 ][ 1 ] ==  0  && theByte[ 0 ][ 2 ] ==  0   
  145.      && theByte[ 0 ][ 3 ] ==  0  && theByte[ 0 ][ 4 ] ==  0   
  146.      && theByte[ 1 ][ 5 ] ==  0  && theByte[ 1 ][ 6 ] ==  0   
  147.      && theByte[ 1 ][ 6 ] ==  0  && theByte[ 4 ][ 2 ] ==  0   
  148.      && theByte[ 5 ][ 2 ] ==  0  && theByte[ 6 ][ 2 ] ==  0 ) {   
  149.      return   8 ;   
  150.    }  else   if  (theByte[ 1 ][ 6 ] ==  0  && theByte[ 2 ][ 6 ] ==  0   
  151.      && theByte[ 3 ][ 6 ] ==  0  && theByte[ 4 ][ 6 ] ==  0   
  152.      && theByte[ 5 ][ 6 ] ==  0  && theByte[ 6 ][ 6 ] ==  0   
  153.      && theByte[ 2 ][ 7 ] ==  0  && theByte[ 3 ][ 7 ] ==  0   
  154.      && theByte[ 4 ][ 7 ] ==  0  && theByte[ 5 ][ 7 ] ==  0   
  155.      && theByte[ 6 ][ 7 ] ==  0  && theByte[ 7 ][ 7 ] ==  0   
  156.      && theByte[ 5 ][ 5 ] ==  0  && theByte[ 4 ][ 2 ] ==  0   
  157.      && theByte[ 4 ][ 3 ] ==  0  && theByte[ 4 ][ 4 ] ==  0   
  158.      && theByte[ 2 ][ 1 ] ==  0 ) {   
  159.      return   9 ;   
  160.    }  else  {   
  161.      return   0 ;   
  162.    }   
  163. }   
  164.   
  165. private  String parse4Num( byte [][] theByte) {   
  166.     int  x =  0 ;   
  167.     int  y =  0 ;   
  168.    String num;   
  169.     byte [][] numByte =  new   byte [ 10 ][ 8 ];   
  170.     for  ( int  i =  5 ; i <  15 ; i++) {   
  171.      for  ( int  j =  5 ; j <  13 ; j++) {   
  172.      numByte[x][y] = theByte[i][j];   
  173.      y++;   
  174.     }   
  175.     x++;   
  176.     y =  0 ;   
  177.    }   
  178.    num =  ""  + parse1Num(numByte);   
  179.    x =  0 ;   
  180.    y =  0 ;   
  181.    numByte =  new   byte [ 10 ][ 8 ];   
  182.     for  ( int  i =  5 ; i <  15 ; i++) {   
  183.      for  ( int  j =  14 ; j <  22 ; j++) {   
  184.      numByte[x][y] = theByte[i][j];   
  185.      y++;   
  186.     }   
  187.     x++;   
  188.     y =  0 ;   
  189.    }   
  190.    num += parse1Num(numByte);   
  191.    x =  0 ;   
  192.    y =  0 ;   
  193.    numByte =  new   byte [ 10 ][ 8 ];   
  194.     for  ( int  i =  5 ; i <  15 ; i++) {   
  195.      for  ( int  j =  23 ; j <  31 ; j++) {   
  196.      numByte[x][y] = theByte[i][j];   
  197.      y++;   
  198.     }   
  199.     x++;   
  200.     y =  0 ;   
  201.    }   
  202.    num += parse1Num(numByte);   
  203.    x =  0 ;   
  204.    y =  0 ;   
  205.    numByte =  new   byte [ 10 ][ 8 ];   
  206.     for  ( int  i =  5 ; i <  15 ; i++) {   
  207.      for  ( int  j =  32 ; j <  40 ; j++) {   
  208.      numByte[x][y] = theByte[i][j];   
  209.      y++;   
  210.     }   
  211.     x++;   
  212.     y =  0 ;   
  213.    }   
  214.    num += parse1Num(numByte);   
  215.     return  num;   
  216. }   
  217.   
  218. /**  
  219. * @param args  
  220. * @throws IOException  
  221. */   
  222. public   static   void  main(String[] args) {   
  223.    BMPTest t =  new  BMPTest();   
  224.    t.handler( "D:\\eclipse2\\workspace\\BMPTest\\classes\\9834.bmp" );   
  225. }   
  226.   
  227. public   void  handler(String fileName) {   
  228.    File bmpFile =  new  File(fileName);   
  229.    FileInputStream fis;   
  230.    BMPHeader header =  new  BMPHeader();   
  231.    BMPTest bt =  new  BMPTest();   
  232.     try  {   
  233.     fis =  new  FileInputStream(bmpFile);   
  234.     fis.read(header.bm);   
  235.     fis.read(header.size);   
  236.     fis.read(header.save);   
  237.     fis.read(header.dataPos);   
  238.     fis.read(header.desSize);   
  239.     fis.read(header.width);   
  240.     fis.read(header.hight);   
  241.     fis.read(header.plane);   
  242.     fis.read(header.bytes);   
  243.     fis.read(header.zip);   
  244.     fis.read(header.picSize);   
  245.     fis.read(header.shuiPing);   
  246.     fis.read(header.cuiZhi);   
  247.     fis.read(header.colorNum);   
  248.     fis.read(header.colorTab);   
  249.     fis.read(header.bmpData);   
  250.    }  catch  (FileNotFoundException e) {   
  251.     e.printStackTrace();   
  252.    }  catch  (IOException e) {   
  253.     e.printStackTrace();   
  254.    }   
  255.    System.out.println( "The Picture is:"   
  256.      + bt.parse4Num(bt.parse960ToLine(header.bmpData)));   
  257. }   
  258. }   

随机码图片格式确定 每位数字的位置都是确定的。。 现在网站上的随机码换成彩色的了

分享到:
评论

相关推荐

    C#批量图片格式转换完整源码__(0521).rar

    C#支持常见的图片格式,如JPEG、PNG、BMP等,通过Image类的Save方法可以将图片保存为不同的格式。 3. 图片格式转换: 要进行图片格式转换,首先需要加载源图片,然后创建一个新的目标图像对象,设置其格式,最后将...

    jpg2bmp.zip

    在IT行业中,图片处理是一项常见的任务,涉及到各种图像文件格式的转换、编辑和优化。本资源"jpg2bmp.zip"提供了一个C语言编写的样例,用于将JPEG(jpg)图像文件转换为Bitmap(bmp)格式。这个压缩包内包含的文件...

    Visual C++.NET图像处理编程 源代码

    7. **图像**:这个目录可能包含了用于演示或测试的图像文件,例如JPG、PNG、BMP等格式,读者可以使用这些图像来运行源代码并观察处理结果。 8. **源程序**:这个目录下的文件可能包含了C++源代码文件,如.cpp或.h...

    ASP把网页中的电话号码生成图片的代码.doc

    2. `Response.ContentType = "Image/BMP"` 设置了响应的内容类型为位图图像,告诉浏览器接收的数据是图片格式。 3. `Randomize` 初始化随机数生成器,用于在后续的代码中生成随机的颜色和字符样式。 4. `str` 变量...

    壁纸更换器源代码vb

    可支持多种图片格式 (GIF/JPG/BMP/TIFF) ' 3。远程配置文件、图片远程路径 可支持多种读取方法或协议 (HTTP/FTP/共享路径/本地路径) ' 4。后台运行,占用系统资源小。(物理内存约 600KB,虚拟内存约 1400KB) '...

    C# 文字转换成图像源代码

    本资源提供的是一个C#编写的源代码,可以将文本框中的文字转换成Jpeg、Bmp和Png等常见图像格式。以下是对这个知识点的详细讲解: 1. **C#编程语言**: C#是由微软开发的一种面向对象的编程语言,广泛应用于Windows...

    C# 图片浏览器 自动播放

    图片数据可能以BMP、JPEG、PNG等多种格式存在,因此还需要使用到System.Drawing命名空间中的Image类,它可以解析这些格式的图像文件。 图片显示则可能利用PictureBox控件,这是Windows Forms中用于显示图像的常用...

    电话号码图片显示

    这种方式通过将电话号码转换为图片格式,使得机器难以识别,但不影响人类用户查看和拨打。本文将深入探讨电话号码图片显示的原理、实现方式以及其在ASP(Active Server Pages)环境中的应用。 首先,我们要理解为...

    C#写的图片生成器 将文件转换成图片

    本项目,"C#写的图片生成器",是利用C#的功能实现了一个独特的工具,能够将任意文件转换为图片格式。这个功能在某些情况下非常有用,比如在文件分享时保护数据隐私,或者在网页上展示文档内容。 首先,我们来看C#的...

    Android有效解决加载大图片时内存溢出的问题

    同时,也可以使用 inPreferredConfig 选项来指定图片的解码格式,从而减少内存的消耗。 例如,下面的代码展示了如何使用 BitmapFactory.Options 来加载大图片: ```java InputStream is = this.getResources()....

    C#做的打地鼠游戏,与随机数 图片相关

    C#可以加载和显示BMP、JPEG、PNG等格式的图片,通过`PictureBox`控件或者直接操作GDI+ API实现。 【Visual Studio 2005】 Visual Studio 2005是微软的一个集成开发环境(IDE),支持多种编程语言,包括C#。开发者...

    Delphi的图片管理程序

    TImage组件可以加载各种图像格式,如JPEG、PNG、BMP等,并且能够进行缩放、平移等操作。开发者可能还使用了第三方库,如GDI+或FreeImage,以支持更多图像格式和增强显示效果。 2. **图片查找**:图片查找功能通常是...

    自编桌面壁纸自动换~比微软的好!!自编VB更改系统墙纸!附带源码!

    可支持多种图片格式 (GIF/JPG/BMP/TIFF) ' 3。远程配置文件、图片远程路径 可支持多种读取方法或协议 (HTTP/FTP/共享路径/本地路径) ' 4。后台运行,占用系统资源小。(物理内存约 600KB,虚拟内存约 1400KB) '...

    C#做的图片浏览器(MyViewer)

    2. 图像文件格式:图片浏览器需要支持常见的图像文件格式,如JPEG、PNG、BMP等。这需要对这些文件格式的理解,以及利用适当的方法读取和解析它们。 3. GUI设计:MyViewer的用户界面可能是使用Windows Forms或WPF...

    c#图片转换icon程序及源码

    C#具有类型安全、垃圾回收、自动内存管理等特性,使得编写高效且稳定的代码变得容易。 2. **图像处理**: 在C#中处理图像,通常会用到System.Drawing命名空间下的类。这个命名空间提供了Bitmap、Image、Graphics等...

    picture view tool

    此外,"Picture View Tool"很可能支持常见的图片格式,如JPEG、PNG、BMP等。在C#中,这些格式可以通过Image类的FromFile方法加载,系统会自动根据文件扩展名选择合适的编码解码器。为了支持更多格式,开发者可能需要...

    图片处理系统

    9. 图像格式转换:C# .NET支持多种图像格式,如JPEG、PNG、BMP等,可以使用Image类的Save方法指定格式进行转换。 10. 图像处理库:除了System.Drawing,还有许多第三方库如AForge.NET、Emgu CV等,它们提供了更丰富...

    仿QQ屏幕截图

    3. **保存图片**:捕获并编辑后的图像可以保存为多种格式,如JPG、PNG或BMP。这通过`Image.Save()`方法完成,需要指定保存路径和文件格式。 4. **用户界面**:C#的Windows Forms或WPF框架可用于创建用户友好的界面...

    skin_java_

    【压缩包子文件的文件名称列表】中包含的都是图像文件(.bmp、.gif、.jpg)和可能的封面图片(.pdf、.epub、.txt),这些通常是与UI设计、图书制作或者多媒体元素相关的。在Java编程中,可以使用Java的内置类如`...

    validpic.zip_验证码 学习

    这个“validpic.zip”压缩包包含了一套学习验证码识别的资源,特别关注256色BMP图片验证码的处理。在IT领域,理解和创建验证码识别系统是Web开发和人工智能(AI)中的一个重要课题。 首先,我们来看看压缩包中的...

Global site tag (gtag.js) - Google Analytics