关于提高扫描速度的改进方案(转载)--Zxing与Zbar结合使用
2015-01-21 11:18
405 查看
本文转载自Terry_erdong:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=332855&page=1&ordertype=1
最近公司需要实现二维码扫描的功能,可能这个大家一看就觉得。论坛Demo一大把,随便copy一个就可以使用了!起初我也是这么认为,随便找了一个改改!!后来发现Bug太多,有太多不理想的东西。。索性自己来做。
首先说一下目前大家常用的方法的不足吧:
一、 使用开源Zxing扫描
1、原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做
2、有效扫描区域不好控制,可能是我自己技术不成熟,没找到好方法
3、Zxing是Java写的,对二维码的解析效率不是很高
二、 使用iOS开发经常使用的Zbar扫描
1、 Zbar是c实现的二维码解析,效率和Zxing不是一个层面的,但是貌似是日本人写的,中文扫描会乱码
2、 Zbar的扫描界面对相机的控制没有Zxing封装的好
基于以上一些原因,笔者决定何不将二者结合起来,用Zxing来控制摄像头,用Zbar来解析扫描到的数据,说干就干。
三、 我的开发步骤
干起来也不是那么简单,剥离Zxing的Camera控制代码,得到扫描的原始数据,Zxing的ViewFindView个人感觉不是很好,索性我就把它去掉了,直接通过xml文件进行布局,多屏幕的适配瞬间就解决了。并且对于扫描激光线的控制,横竖屏的控制都只需要稍稍变换代码即可实现。so good!
既然拿到了扫描的数据,那怎么解析呢???Zbar的有效扫描区域的截取也是个难点。通过多天的尝试也最终解决。
可是Zbar的中文乱码应该怎么解决呢?网上找了之后发现需要修改Zbar的qrcodetxt.c将里面的编码ISO-8859-1改成GBK就可以了,可是改了源码就需要编译生成.so文件才能使用啊!我了个去。。这不是让我去使用ndk么、、、幸好找到了这位大婶的方法
(http://www.blackdogfoundry.com/blog/zbar-bar-code-qr-code-reader-android/),一步步走,果断编译出了我想要的.so文件。。。哈哈
好了一切搞定,给出效果图
1. 整个代码结构
2. 修改Zbar有效扫描区域的关键代码
3. 解码的关键代码
4. xml界面布局效果图
5. 最终的扫描效果图
四、最后我比对了一下扫描效果
1. QQ的扫描用的也是Zxing的,解码没有我的这个快
2. 支付宝的扫描效率很迅速,但是他的灰色覆盖层是假的,,将二维码不放到取景框也可以扫描到结果
五、 扫描界面模仿的是QQ的效果,但是图片和激光线都是我自己PS的,,为了画那个激光线,我们的美工教了我一招动感模糊。。哦也,我又掌握了一个新技能。。。最后感谢所有我参考过的博文博主,由于太多不一一列出,一并感谢。。
六、 源码已托管至GitHub 以下是链接:https://github.com/SkillCollege/QrCodeScan
七、 Zbar编译的库源码也已经push到github,有需要的可以fork修改。。。
最近公司需要实现二维码扫描的功能,可能这个大家一看就觉得。论坛Demo一大把,随便copy一个就可以使用了!起初我也是这么认为,随便找了一个改改!!后来发现Bug太多,有太多不理想的东西。。索性自己来做。
首先说一下目前大家常用的方法的不足吧:
一、 使用开源Zxing扫描
1、原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做
2、有效扫描区域不好控制,可能是我自己技术不成熟,没找到好方法
3、Zxing是Java写的,对二维码的解析效率不是很高
二、 使用iOS开发经常使用的Zbar扫描
1、 Zbar是c实现的二维码解析,效率和Zxing不是一个层面的,但是貌似是日本人写的,中文扫描会乱码
2、 Zbar的扫描界面对相机的控制没有Zxing封装的好
基于以上一些原因,笔者决定何不将二者结合起来,用Zxing来控制摄像头,用Zbar来解析扫描到的数据,说干就干。
三、 我的开发步骤
干起来也不是那么简单,剥离Zxing的Camera控制代码,得到扫描的原始数据,Zxing的ViewFindView个人感觉不是很好,索性我就把它去掉了,直接通过xml文件进行布局,多屏幕的适配瞬间就解决了。并且对于扫描激光线的控制,横竖屏的控制都只需要稍稍变换代码即可实现。so good!
既然拿到了扫描的数据,那怎么解析呢???Zbar的有效扫描区域的截取也是个难点。通过多天的尝试也最终解决。
可是Zbar的中文乱码应该怎么解决呢?网上找了之后发现需要修改Zbar的qrcodetxt.c将里面的编码ISO-8859-1改成GBK就可以了,可是改了源码就需要编译生成.so文件才能使用啊!我了个去。。这不是让我去使用ndk么、、、幸好找到了这位大婶的方法
(http://www.blackdogfoundry.com/blog/zbar-bar-code-qr-code-reader-android/),一步步走,果断编译出了我想要的.so文件。。。哈哈
好了一切搞定,给出效果图
1. 整个代码结构
2. 修改Zbar有效扫描区域的关键代码
3. 解码的关键代码
4. xml界面布局效果图
5. 最终的扫描效果图
四、最后我比对了一下扫描效果
1. QQ的扫描用的也是Zxing的,解码没有我的这个快
2. 支付宝的扫描效率很迅速,但是他的灰色覆盖层是假的,,将二维码不放到取景框也可以扫描到结果
五、 扫描界面模仿的是QQ的效果,但是图片和激光线都是我自己PS的,,为了画那个激光线,我们的美工教了我一招动感模糊。。哦也,我又掌握了一个新技能。。。最后感谢所有我参考过的博文博主,由于太多不一一列出,一并感谢。。
六、 源码已托管至GitHub 以下是链接:https://github.com/SkillCollege/QrCodeScan
七、 Zbar编译的库源码也已经push到github,有需要的可以fork修改。。。
相关文章推荐
- 关于使用ZXing扫描二维码出现中文乱码的问题
- Android二维码ZXing扫描区域大小的调整,提高扫描速度
- 二维码扫描:ZBar,ZXing的使用
- 数据库查询优化方案(处理上百万级记录如何提高处理查询速度)(转载)
- 二维码扫描:ZBar,ZXing的使用
- 关于IOS二维码创建、扫描的使用方式(IOS,ZBar支持64位解决办法)
- 关于使用ZXing扫描二维码出现中文乱码的问题
- 关于SpringMVC与JDBC结合实现对数据库增删改查(适合初学者理解JDBC使用,但是对于SpringMVC框架使用了扫描,不太适合初学者)
- 关于简单改进ibatis的默认分页机制提高查询效率方案
- 关于opencv遍历像素速度的提高方案
- [转载]数据库查询优化方案(处理上百万级记录如何提高处理查询速度)
- 转载一篇不错的关于.NET中内存使用的文章
- 在web项目中使用gzip压缩方式提高速度的东东
- 使用CHARINDEX函数提高查询速度
- 在ASP中使用均速分页法提高分页速度
- 在ASP中使用均速分页法提高分页速度的方法
- 关于如何使用自定义的结束消息循环的方式 (转载)
- extremetable+hibernate实现分页 关于结合hibernate后台数据分页和eXtremeTable分页功能的使用
- 关于hibernate与spring的结合使用中的配置文件
- 关于const的使用方法【转载】