一、引言
Data Matrix原名Data code,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明。Data Matrix又可分为ECC000-140与ECC200两种类型,ECC000-140具有多种不同等级的错误纠正功能,而ECC200则透过Reed-Solomon演算法产生多项式计算出错误纠正码,其尺寸可以依需求印成不同大小,但采用的错误纠正码应与尺寸配合,由于其演算法较为容易,且尺寸较有弹性,故一般以ECC200较为普遍。【百度百科】
目前能实现检测与识别库有libdmtx库和zxing。这里以libdmtx库为例,进行检测与识别。
二、环境配置与编译
在c++ windows vs环境中,环境配置还是有些麻烦的。从上述链接中下载所需libdmtx源文件(本人使用的是0.7.5版本)。
- 新建vs项目,我这里是新建一个编译成静态库项目;
- 解压下载的libdmtx文件,将libdmtx-0.7.5/目录下的所有文件(有24个文件)复制到新建项目的根目录;如下所示;
- 将复制的文件添加到这个项目文件结构中,如下图所示;
- 修改预编译头属性(不使用预编译头),如下图所示;
- 选择编译为C代码,如下图所示;
- 将#include "dmtx.h"和#include "dmtxstatic.h"两个头文件分别添加到上述第3步中源文件下每一个.c文件里;
- 将float.h、stdio.h、limits.h、assert.h、math.h文件增加到dmtx.h中;注释掉dmtx.c文件里包括的.c文件;
- 将项目查找到CHKERR、CHKSCHEME、CHKSIZE、CALLBACK_MATRIX、ISDIGIT、CALLBACK_POINT_PLOT等的定义中复制到dmtx.h中;
- 将静态库程序里面的snprintf函数用sprintf_s函数替代;
- 出现诸如下图所示的错误,可以将声明与定义该函数的static删掉(本人采用的方法),也可以用非静态函数进行二次封装(工作量大);
如果按照上述进行操作,大概就能如下所示编译出静态库了。前九个步骤还是好操作的,第十个花时间,如果使用,可以移步这里。这是我调整好的代码。
三、运用
安装上述方式编译,得到windows环境下动态库,使用方式可以参考如下。首先新建QRCode属性表,如下所示:
配置包含目录及库目录,如下:
最后配置附加依赖项,如下:
本人进行二次封装后,使用效果如下: