《打造极致二维码扫描系列》 -- ZBar开发详解
发布时间:2024-10-14 21:16:09 点击量:
ZBar是一个开源库,用于扫描、读取二维码和条形码。支持的二维码包括:EAN/UPC,QR等。
如果你是一个iPhone应用开发人员,做到二维码模块的时候,是不是会考虑ZBar开源项目来助你一臂之力呢?可是我这里说的是Android平台的开发,我为什么提到ZBar项目呢,难道我要用ZBar在Android平台扫描二维码吗?对的,没有错!这将会是一个极其不错的选择。为什么这么说呢,不是很多Android开发都是用ZXing来解析二维码的么?好吧,ZXing是我下一篇文章要写的,这里先抛砖引玉说一点点。我将ZXing和ZBar做一个比较,说说它们的优缺点,便于大家的取舍。
- ZXing项目的示例程序对于摄像头的控制写的非常全面,ZBar的没有
- ZBar基于C语言编写,解码效率高于ZXing项目
- ZBar是日本人写的,对于中文解析会乱码这个肯定有人遇到过的,ZXing不会乱码
- 扫描框的绘制,ZXing的扫描框绘制是自定义View的,截取区域不好控制(至少我没控制好),ZBar的可以自定义,只要你会计算截取区域
这里需要着重说一下第四点,我也是沿着解决这个第四点和第二点的问题才思考了这么多东西的。好烦躁自己的这种强迫症啊
1. 着重介绍一下扫描截取界面的计算:
- pt: 预览图中二维码图片的左上顶点坐标,也就是手机中相机预览中看到的待扫描二维码的位置
- qrheight: 预览图中二维码图片的高度
- qrwidth: 预览图中二维码图片的宽度
- pheight:预览图的高度,也即camera的分辨率高度
- pwidth: 预览图的宽度,也即camera的分辨率宽度
- st: 布局文件中扫描框的左上顶点坐标
- sheight: 布局文件中扫描框的高度
- swidth: 布局文件中扫描框的宽度
- cheight:布局文件中相机预览控件的高度
- cwidth: 布局文件中相机预览控件的宽度
其中存在这样一个等比例公式:
ptx / pwidth=stx / cwidth ;
pty / pheight=sty / cheight ;
qrwidth / pwidth=swidth / cwidth ;
qrheight / pheight=sheight / cheight ;
即:
ptx=stx * pwidth / cwidth ;
pty=sty * pheight / cheight ;
qrwidth=swidth * pwidth / c