基于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生成器相关推荐

  1. 【QT学习笔记】基于QT的天气预报

    [QT学习笔记]基于QT的天气预报 前言 那就开始吧! 先看一下效果 颜面最重要,画个UI 构造实现 怎么开始? 开始解析数据 关于城市切换 ok 最后源码献上 感谢 前言 学习qt已经有一段时间了, ...

  2. (项目实战)基于QT嵌入式ARM数据采集卡上位机(二)——页面布局

    (项目实战)基于QT嵌入式ARM数据采集卡上位机(二)--页面布局 上一篇文章<基于 QT 嵌入式ARM数据采集卡上位机(一)> 下一篇文章<(项目实战)基于QT嵌入式ARM数据采集 ...

  3. Vue2 - 网易云音乐项目笔记(基于Vant UI组件库)

    目录 一.项目技术 二.准备工作 1.初始化Vue项目 2.配置Vant UI组件库 3.下载并使用vue-router库 4.接口API 5.postcss插件 三.分析页面实现功能 1.路由页面准 ...

  4. 《BI项目笔记》基于雪花模型的维度设计

    GBGradeCode 外键关系: 1 烟叶等级 T_GBGradeCode.I_DistinctionID=T_Distinction.I_DistinctionID 烟叶等级分为:上等烟.中等烟. ...

  5. 【项目一】基于Qt平台的交互式输入与输出窗口

    [一]前言: 经过一段时间的C++和Qt学习,作为对这一阶段学习成果的检验,我决定使用Qt平台模仿C++的控制台输入输出编写一个项目. 初学C++的时候,程序获取用户输入是通过标准输入输出流对象实现的 ...

  6. 笔记:基于freeradius 3.0的wifi认证

    环境 Centos7 + MariaDB 5.5.68 + FreeRADIUS 3.0      防火墙懂得自己设置,不懂得全部关掉就行 Centos系统怎么安装就不多说了,我都是用最小化版本的,差 ...

  7. 项目记录:基于QT的简易音乐播放器

    一.功能介绍 1.能够自定义背景图片 2.实现了音乐播放器的最基本功能,即播放与否.切换歌曲及歌单.显示歌曲信息.调节音量.播     放模式等 3.根据所选中的框体,更新播放列表及播放顺序 4.从播 ...

  8. 学习笔记(01):基于qt和ffmpeg视频播放器开发实战-avformat_open_input函数详解

    立即学习:https://edu.csdn.net/course/play/3300/157129?utm_source=blogtoedu

  9. 基于QT Creator 5.14的仿QQ聊天系统【UDP通讯】

    一.使用工具 本次整个项目的开发基于Qt Creator 5.14.2进行的开发与调试,主要通信功能采用UDPSocket完成,是我学习Qt过程中联系的小案例,过程中遇到的bug和完整代码会尽量展现出 ...

最新文章

  1. 山东省第三届数据应用赛事来了!
  2. c语言程序框一点数字就消失,你用C语言编程时,会犯下面的错误吗?
  3. c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)
  4. 神策数据《品牌零售业数字化运营的方法论及实践》白皮书重磅发布
  5. CLR via C# 3 读书笔记(2):第1章 CLR执行模型 — 1.2 将托管模块组合为程序集
  6. android weex跳转闪退,关于weex页面在android端跳转的问题
  7. matplotlib(六)三维作图
  8. linux内核ddr初始化,X-007-UBOOT-DDR的初始化(Bubblegum-96平台)
  9. Android演示Stack(课下作业)
  10. java tree类子项的添加和删除_Java学习2-23 JTree节点的删除与添加(来源网上)
  11. linux netstat
  12. python游戏设计教程视频_零基础python教程-用Python设计你的第一个小游戏
  13. 一封程序员的苦逼辞职信
  14. 你的项目应该如何分层?
  15. ThinkPhp报错:thinkphp\library\think\Template.php Line(1243) template not exists:...test\...\index.html
  16. XenCenter创建VM过程
  17. STVP 烧录hex详细讲解
  18. 裁剪的uincoide的点阵字库结构设计
  19. 函数周期表丨筛选丨行值丨EARLIER与EARLIEST
  20. Mixly系列 | 关于Blynk,你或许不知道的几个小技巧

热门文章

  1. revit服务器维护,Revit软件在运维管理上的应用有哪些
  2. 光遇服务器维护时间多久,光遇聊天室维护多久
  3. 金蝶云苍穹平台工作流相关常用方法
  4. 【STM32】标准库与HAL库对照学习教程外设篇--超声波测距传感器
  5. 获取textedit框中的内容
  6. python3.8.2汉化包-Python3.8.2 软件介绍(附安装包)
  7. svn:org.tigris.subversion.javahl.ClientException: svn: '...' is not a working copy
  8. 阿里云部署ECS ubantu系统
  9. 全面升级2022版Zoomla逐浪CMS官网全新上线激情内测体验进行中
  10. ibatis.builder.BuilderException: Error parsing Mapper XML: Could not resolve type alias ‘XXX‘