1.二维码的前世今生
“二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。 [1]”
上面是百度百科的解释。既然有二维码,那么肯定有一维码。
一维码。最为常见的就是食品 & 书本后面的条码。
条码起源与20世纪40年代,后来在1970年 UPC码发明,并开始广泛应用与食品包装。
具体的介绍可以看百度百科 一维码。
其实二维码与一维码本质上是类似的,就跟一维数组和二维数组一样。
2.二维码的java支持库
为了让java或者说android方便继承条码的功能,google就开发了一个zxing的库:
https://github.com/zxing/zxing
3.生成二维码
zxing 支持很多条码格式:我们这里使用QR_CODE码。也就是我们常见的微信里面的二维码。
我们先来分析下这段代码:
MultiFormatWriter writer =newMultiFormatWriter();
1/2 2/2这是官方最新支持的格式,具体看引入的jar里面支持的格式。
对与bitmatrix的结果,通过摸个算法,设置每个点白色,或者黑色。
最后创建一张二维码的图片。
4.识别二维码
过程也是很简单,使用MultiFormatReader来分析图片,这里不需要缺人图片的条码格式。
如果分析下源码,就是依次使用每种格式的reader来分析,直到找到合适的为止。
当然回了能够把Bitmap转化成Bitmatrix,然后在分析。
1/3 2/3 3/35.扫描二维码
扫描二维码,其实比上面只多了一步,就是把camera获取的东西直接转换,然后进行识别。
首先把camera预览的数据放入previewCallback中。
可以看到,预览的数据data,回传递过来,然后handler的方式传递出去。
接收data的地方:
然后是decode data
1/2 2/2参考:
http://www.cnblogs.com/weixing/archive/2013/08/28/3287120.html
网友评论