DataMatrix识别及定位项目笔记(1)——基于QT+libdmtx-0.7.5的DataMatrix生成器
基于qt和libdmtx库生成DataMatrix的工程,
DataMatrix开源的编码及识别库libdmtx的github:https://github.com/dmtx/libdmtx;
我用qt写的完整工程在:https://github.com/abcvincent/dmtxMaker;
github->doc中有DataMatrix国际标准文件和知乎的详解QR码的文档;
效果如下:
下面是简单的测试代码,qt工程:
//测试代码
// QString str = "DataMatrix";
QString str = "123456789";
DmtxEncode* encode = dmtxEncodeCreate();
assert(encode != NULL);
encode->moduleSize = 5;
encode->marginSize = 5;
encode->sizeIdxRequest=DmtxSymbolSquareAuto;//设置类型默认// dmtxEncodeSetProp( encode, DmtxPropModuleSize, 5); // encode->moduleSize = 5;
// dmtxEncodeSetProp( encode, DmtxPropMarginSize,20); // encode->marginSize = 10;// 下面是代码中默认函数设置 dmtxencode.c->dmtxEncodeCreate(void);
// encode->scheme = DmtxSchemeAscii;
// encode->sizeIdxRequest = DmtxSymbolSquareAuto;
// encode->marginSize = 10;
// encode->moduleSize = 5;
// encode->pixelPacking = DmtxPack24bppRGB;
// encode->imageFlip = DmtxFlipNone;
// encode->rowPadBytes = 0;
// encode->fnc1 = DmtxUndefined;// int ret = dmtxEncodeDataMatrix(encode, strlen(str.toStdString().c_str()), (unsigned char*)str.toStdString().c_str());//案例函数c语言
int ret = dmtxEncodeDataMatrix(encode, str.size(), (uchar*)str.toStdString().data());
assert(ret == 1);int width = dmtxImageGetProp(encode->image, DmtxPropWidth);
int height = dmtxImageGetProp(encode->image, DmtxPropHeight);
int bytesPerPixel = dmtxImageGetProp(encode->image, DmtxPropBytesPerPixel);
int bytesPerLine = dmtxImageGetProp(encode->image, DmtxPropRowSizeBytes);uchar *pxlData = (uchar *)malloc(width*height*bytesPerPixel);
memcpy(pxlData,encode->image->pxl,width*height*bytesPerPixel);
dmtxEncodeDestroy(&encode);QImage img = QImage(pxlData,width,height,bytesPerLine,QImage::Format_RGB888);//如果RGB888不行换别的format
QImage imgshow=img.scaled( this->ui->label->width(), this->ui->label->height(),Qt:: KeepAspectRatio);
ui->label->setPixmap(QPixmap::fromImage(imgshow));
下面是libdmtx库中test的例子,纯c代码,可移植嵌入式,输出的是0和1的数据值,每个代表一个像素;
//libdmtx 自带 examplesize_t width, height, bytesPerPixel;unsigned char str[] = "30Q324343430794<OQQ";unsigned char *pxl;DmtxEncode *enc;DmtxImage *img;DmtxDecode *dec;DmtxRegion *reg;DmtxMessage *msg;//1) ENCODE a new Data Matrix barcode image (in memory only)enc = dmtxEncodeCreate();//dmtxEncodeSetProp( enc, DmtxPropPixelPacking, DmtxPack16bppRGB );//dmtxEncodeSetProp( enc, DmtxPropPixelPacking, DmtxPack32bppRGB );//dmtxEncodeSetProp( enc, DmtxPropWidth, 160 );//dmtxEncodeSetProp( enc, DmtxPropHeight, 160 );assert(enc != NULL);dmtxEncodeDataMatrix(enc, strlen((const char *)str), str);//2) COPY the new image data before releasing encoding memorywidth = dmtxImageGetProp(enc->image, DmtxPropWidth);height = dmtxImageGetProp(enc->image, DmtxPropHeight);bytesPerPixel = dmtxImageGetProp(enc->image, DmtxPropBytesPerPixel);pxl = (unsigned char *)malloc(width * height * bytesPerPixel);//malloc c语言的函数assert(pxl != NULL);memcpy(pxl, enc->image->pxl, width * height * bytesPerPixel);// int width = dmtxImageGetProp(enc->image, DmtxPropWidth);// int height = dmtxImageGetProp(enc->image, DmtxPropHeight);// int bytesPerPixel = dmtxImageGetProp(enc->image, DmtxPropBytesPerPixel);int bytesPerLine = dmtxImageGetProp(enc->image, DmtxPropRowSizeBytes);dmtxEncodeDestroy(&enc);//清除内存fprintf(stdout, "width: \"%d\"\n", width);fprintf(stdout, "height: \"%d\"\n", height);fprintf(stdout, "bpp: \"%d\"\n", bytesPerPixel);for (int i=0; i<width*height; i++){fprintf(stdout, "%d", (pxl[i*3])==0);if (i%width==width-1){fprintf(stdout, "\n");
DataMatrix识别及定位项目笔记(1)——基于QT+libdmtx-0.7.5的DataMatrix生成器相关推荐
- 【QT学习笔记】基于QT的天气预报
[QT学习笔记]基于QT的天气预报 前言 那就开始吧! 先看一下效果 颜面最重要,画个UI 构造实现 怎么开始? 开始解析数据 关于城市切换 ok 最后源码献上 感谢 前言 学习qt已经有一段时间了, ...
- (项目实战)基于QT嵌入式ARM数据采集卡上位机(二)——页面布局
(项目实战)基于QT嵌入式ARM数据采集卡上位机(二)--页面布局 上一篇文章<基于 QT 嵌入式ARM数据采集卡上位机(一)> 下一篇文章<(项目实战)基于QT嵌入式ARM数据采集 ...
- Vue2 - 网易云音乐项目笔记(基于Vant UI组件库)
目录 一.项目技术 二.准备工作 1.初始化Vue项目 2.配置Vant UI组件库 3.下载并使用vue-router库 4.接口API 5.postcss插件 三.分析页面实现功能 1.路由页面准 ...
- 《BI项目笔记》基于雪花模型的维度设计
GBGradeCode 外键关系: 1 烟叶等级 T_GBGradeCode.I_DistinctionID=T_Distinction.I_DistinctionID 烟叶等级分为:上等烟.中等烟. ...
- 【项目一】基于Qt平台的交互式输入与输出窗口
[一]前言: 经过一段时间的C++和Qt学习,作为对这一阶段学习成果的检验,我决定使用Qt平台模仿C++的控制台输入输出编写一个项目. 初学C++的时候,程序获取用户输入是通过标准输入输出流对象实现的 ...
- 笔记:基于freeradius 3.0的wifi认证
环境 Centos7 + MariaDB 5.5.68 + FreeRADIUS 3.0 防火墙懂得自己设置,不懂得全部关掉就行 Centos系统怎么安装就不多说了,我都是用最小化版本的,差 ...
- 项目记录:基于QT的简易音乐播放器
一.功能介绍 1.能够自定义背景图片 2.实现了音乐播放器的最基本功能,即播放与否.切换歌曲及歌单.显示歌曲信息.调节音量.播 放模式等 3.根据所选中的框体,更新播放列表及播放顺序 4.从播 ...
- 学习笔记(01):基于qt和ffmpeg视频播放器开发实战-avformat_open_input函数详解
立即学习:https://edu.csdn.net/course/play/3300/157129?utm_source=blogtoedu
- 基于QT Creator 5.14的仿QQ聊天系统【UDP通讯】
一.使用工具 本次整个项目的开发基于Qt Creator 5.14.2进行的开发与调试,主要通信功能采用UDPSocket完成,是我学习Qt过程中联系的小案例,过程中遇到的bug和完整代码会尽量展现出 ...
最新文章
- 山东省第三届数据应用赛事来了!
- c语言程序框一点数字就消失,你用C语言编程时,会犯下面的错误吗?
- c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)
- 神策数据《品牌零售业数字化运营的方法论及实践》白皮书重磅发布
- CLR via C# 3 读书笔记(2):第1章 CLR执行模型 — 1.2 将托管模块组合为程序集
- android weex跳转闪退,关于weex页面在android端跳转的问题
- matplotlib(六)三维作图
- linux内核ddr初始化,X-007-UBOOT-DDR的初始化(Bubblegum-96平台)
- Android演示Stack(课下作业)
- java tree类子项的添加和删除_Java学习2-23 JTree节点的删除与添加(来源网上)
- linux netstat
- python游戏设计教程视频_零基础python教程-用Python设计你的第一个小游戏
- 一封程序员的苦逼辞职信
- 你的项目应该如何分层?
- ThinkPhp报错:thinkphp\library\think\Template.php Line(1243) template not exists:...test\...\index.html
- XenCenter创建VM过程
- STVP 烧录hex详细讲解
- 裁剪的uincoide的点阵字库结构设计
- 函数周期表丨筛选丨行值丨EARLIER与EARLIEST
- Mixly系列 | 关于Blynk,你或许不知道的几个小技巧
热门文章
- revit服务器维护,Revit软件在运维管理上的应用有哪些
- 光遇服务器维护时间多久,光遇聊天室维护多久
- 金蝶云苍穹平台工作流相关常用方法
- 【STM32】标准库与HAL库对照学习教程外设篇--超声波测距传感器
- 获取textedit框中的内容
- python3.8.2汉化包-Python3.8.2 软件介绍(附安装包)
- svn:org.tigris.subversion.javahl.ClientException: svn: '...' is not a working copy
- 阿里云部署ECS ubantu系统
- 全面升级2022版Zoomla逐浪CMS官网全新上线激情内测体验进行中
- ibatis.builder.BuilderException: Error parsing Mapper XML: Could not resolve type alias ‘XXX‘