二维码开源库ZBar-windows下编译和使用
源码
下载最新Zbar源码(http://zbar.sourceforge.net/),网站的WIKI是空白的,所以只能在源码包里找使用说明了,很遗憾Windows下怎么编译没说明,只是说明了Windows安装包的使用(可能看得不够仔细,没找到),源码包里面有个VS的工程同样是用库文件的。网上搜了一下,也都是使用官网Windows安装包,然后调用安装目录的库文件的例程,直接使用源码的找不到。倒是刚好找到了一个STM32F4的版本(http://www.openedv.com/forum.php?mod=viewthread&tid=82582&page=1),按照其说明貌似是有问题,不能使用的,但能编译,至少还有些参考价值,比如需要使用到源码包里面的那些文件。源码目录如下,需要使用的文件,基本在zbar文件夹内。

移植过程
开始时使用的IDE是VS,由于平时会写一些上位机和小工具,所以第一时间想到的是VS。但经过一番折腾还是投降了。因为Zbar是用C99写的,还有用了不少GCC的语法,使用VC编译不了。于是下载了CodeBlock,下载是codeblocks-17.12mingw-setup.exe,带mingw,包含GCC和GDB,链接http://www.codeblocks.org/downloads/26。
以下是移植记录:
1: 新建Console工程
2: 复制zbar-0.10\include\zbar.h到zbar-0.10\zbar\,并且把zbar文件夹复制到工程目录
3:添加zbar-0.10\zbar\decoder和zbar-0.10\zbar\qrcode目录下的源码
4:添加zbar-0.10\zbar\目录下的config.c,decoder.c,error.c,image.c, img_scanner.c, refcnt.c. scanner.c,symbol.c
工程结构如下:

5:添加相关头文件路径,编译
报错
Zbar\zbar\config.c|24|fatal error: config.h: No such file or directory|
搜遍整个源码目录也没看到有config.h。查看了源码包根目录下INSTALL文件,config.h应该是由autoconf工具生成的,但这东西又是linux或unix下的,于是拷贝ZBar到Linux下,按照INSTALL的说明生成config.h,再添加回windows下的工程目录,
/* include/config.h. Generated from config.h.in by configure. */
/* include/config.h.in. Generated from configure.ac by autoheader. */ /* whether to build support for Code 128 symbology */
#define ENABLE_CODE128 1 /* whether to build support for Code 39 symbology */
#define ENABLE_CODE39 1 /* whether to build support for EAN symbologies */
#define ENABLE_EAN 1 /* whether to build support for Interleaved 2 of 5 symbology */
#define ENABLE_I25 1 /* whether to build support for PDF417 symbology */
#define ENABLE_PDF417 /* whether to build support for QR Code */
#define ENABLE_QRCODE 1 /* Program major version (before the '.') as a number */
#define ZBAR_VERSION_MAJOR 0 /* Program minor version (after '.') as a number */
#define ZBAR_VERSION_MINOR 10
编译。
报错
Zbar\zbar\qrcode\qrdectxt.c|9|fatal error: iconv.h: No such file or directory|
Iconv同样是linux下的东西,Windows编译Linux下的源码就是苦逼。
下载并安装libiconv-1.9.2-1.exe(http://gnuwin32.sourceforge.net/packages.html)
将安装目录下的iconv.h,libcharset.h,localcharset.h,libiconv2.dll拷贝工程目录下,并设置相关头文件和lib路径
重新编译后
报错Zbar\zbar\image.c|217|error: expected ')' before 'PRIx32'|
PRIx32是在inttypes.h定义的,包含该头文件后再编译,终于不报错了。
6:编译通过后,那怎么使用呢?查看zbar-0.10\examples目录下文件,里面是一些使用例程,最终挑选了zbar-0.10\examples\scan_image.c,将其内容复制粘贴到main.c,重新编译
报错
Zbar\main.c|3|fatal error: png.h: No such file or directory|
下载并安装libpng-1.2.37-setup.exe(http://gnuwin32.sourceforge.net/packages.html)
将安装目录下的png.h,pngconf.h,libpng12.dll拷贝工程目录下,并设置相关头文件和lib路径
重新编译
报错
png\include\png.h|477|fatal error: zlib.h: No such file or directory|
下载并安装zlib-1.2.3.exe(http://gnuwin32.sourceforge.net/packages.html)
将安装目录下的zconf.h,zlib.h,zlib1.dll拷贝工程目录下,并设置相关头文件和lib路径
重新编译。
通过。
7:将zbar-0.10\examples\barcode.png复制到工程根目录,对main.c做一下修改
屏蔽if(argc < 2) return(1);
get_data(argv[1], &width, &height, &raw);改为get_data("barcode.png", &width, &height, &raw);
重新编译运行后,窗口输出如下:

到此,ZBar基本能正常运行了。
最终的工程结构如下:

二维码开源库ZBar-windows下编译和使用的更多相关文章
- 二维码开源库zbar、zxing使用心得
首先说明我的测试场景是“识别打印在纸上的二维码”,在扫描结果中寻找二维码并进行识别,而不是直接让摄像头对着二维码扫描. zbar和zxing用的都是自己从github上clone的c++源码/接口编译 ...
- 二维码开源库ZBar-MDK STM32F429移植
前两篇文章已经实现ZBar在Windows平台下的编译和使用,本文将介绍如何把ZBar移植到STM32F429,IDE使用MDK. 1. MDK工程设置 (1)不勾选Use MicroLIB ,使用I ...
- 二维码开源库ZBar-吐槽篇
前不久在网上看到一篇文章<QR-Decoder-OV5640 二维码识别> ,是某开发板的教程.记得对应的开发板以前购买过,当初只是为了看OV5640的JPG的输出效果,结果由于公司奇葩的 ...
- 二维码开源库ZBar-实现中文解码
中文乱码 上篇<ZBar-windows下编译和使用>已经成功解析了条形码,但目标是二维码,经测试二维码中文会出现乱码.下图二维码的内容是"http123测试456", ...
- C++二维码相关库编译
一.瞎想 坐在地铁上闲来无聊,突然想到了二维码,顺手就百度了下相关的资料,目前C++二维码相关的库不多,也就zbar(开源中国上下了半天也没下载下来).zxing,不过这两个库据说都是解析二维码的,不 ...
- Android二维码开源项目zxing用例简化和生成二维码、条形码
上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的測试程序:CaptureActivity比較复杂,我仅仅要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自 ...
- 个性二维码开源专题<替换元素点>
基础方法:ChangeFillShape //修改填充形状 ChangeFillShape(...) // 摘要: // 修改填充形状 // // 参数: // g: // 图形画板 // // Fo ...
- 个性二维码开源专题<替换定位点>
基础方法: ChangeFillShape //修改填充形状 ChangeFillShape(...) // 摘要: // 修改填充形状 // // 参数: // g: // 图形画板 // // F ...
- 个性二维码开源专题<液化/圆角/效果>
基础方法: ChangeFillShape //修改填充形状 ChangeFillShape(...) // 摘要: // 修改填充形状 // // 参数: // g: // 图形画板 // // F ...
随机推荐
- 久未更 ~ 三之 —— CardView简单记录
> > > > > 久未更 系列一:CardView 点击涟漪效果实现 //在 cardview 中 实现点击涟漪效果 android:clickable="t ...
- EhCache 在集群环境中使用缓存系统
EhCache 分布式缓存/缓存集群 EhCache提供了很多种解决方案 这里只介绍一种最常用而且简单的RMI方式分布式缓存决绝方案 Automatic Peer Discovery 自动成员发现方 ...
- 从零开始学习前端JAVASCRIPT — 4、JavaScript基础Math和Date对象的介绍
Math对象的介绍 1:Math对象 Math 对象用于执行数学任务.并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math().您无需创建它,通过把 Math 作为对象使用就 ...
- centos 6.4 mysql rpm 离线安装【备忘】
离线状态下使用rpm的安装包进行mysql的安装,仅作备忘 准备工作: 官网下载mysql离线rpm安装包(这里就不演示了,拿现成的做演示) =================更新线 2018-01- ...
- VisualSVN Server的配置和使用方法
VisualSVN Server是免费的,而VisualSVN是收费的.VisualSVN是SVN的客户端,和Visual Studio集成在一起, VisualSvn Server是SVN的服务器端 ...
- Dedecms列表页标签list/pagelist使用方法及pagelist的样式
Dede的默认页面中有个list_article.htm页面,这是dede的列表页面.在列表页显示文章的列表,是通过dede的list和pagelist这两个个标签实现的.本文就这两个标签的使用及pa ...
- Android之MaterialDesign应用技术
PS:纵观现在大大小小软件的界面都变的比较漂亮,还有一些系统了,比如小米的MIUI,华为的EMUI等,虽然底层都是安卓,但他们的界面多多少少都会不同,谷歌对这个UI也是非常重视的,MaterialDe ...
- 【编程技巧】NSDate,NSDateFormatter,NSTimeInterval
//获取日期 todaysDate=[NSDate date]; //显示日期和时间 dateFormat = [[NSDateFormatter alloc] init];//NSDate没有自己的 ...
- Guake!
快捷键及其定制: [全局快捷键] F12:显示/隐藏Guake的程序界面. [局部快捷键] Ctrl+Shift+T:新建标签页: Ctrl+Shift+W:关闭标签页: Ctrl+Shift+C:复 ...
- 2017年 JavaScript 框架回顾 -- 后端框架
本文是2017年 JavaScript 框架回顾系列的最后的一篇文章,主要介绍 JavaScript 的后端框架情况. 从上图中可以看到,Express 作为用 JavaScript 编写的后端服务的 ...