Qt 识别 DM 码

识别普通二维码网上库很多,这个库专门识别 DM码

下载libdmtx

https://github.com/dmtx/libdmtx

添加源码到Qt 工程

libdmtx.pri

INCLUDEPATH +=$$PWD

HEADERS += \
    $$PWD/libdmtx/dmtx.h \
    $$PWD/libdmtx/dmtxstatic.h

SOURCES += \
    $$PWD/libdmtx/dmtx.c \
    $$PWD/libdmtx/dmtxbytelist.c \
    $$PWD/libdmtx/dmtxdecode.c \
    $$PWD/libdmtx/dmtxdecodescheme.c \
    $$PWD/libdmtx/dmtxencode.c \
    $$PWD/libdmtx/dmtxencodeascii.c \
    $$PWD/libdmtx/dmtxencodebase256.c \
    $$PWD/libdmtx/dmtxencodec40textx12.c \
    $$PWD/libdmtx/dmtxencodeedifact.c \
    $$PWD/libdmtx/dmtxencodeoptimize.c \
    $$PWD/libdmtx/dmtxencodescheme.c \
    $$PWD/libdmtx/dmtxencodestream.c \
    $$PWD/libdmtx/dmtximage.c \
    $$PWD/libdmtx/dmtxmatrix3.c \
    $$PWD/libdmtx/dmtxmessage.c \
    $$PWD/libdmtx/dmtxplacemod.c \
    $$PWD/libdmtx/dmtxreedsol.c \
    $$PWD/libdmtx/dmtxregion.c \
    $$PWD/libdmtx/dmtxscangrid.c \
    $$PWD/libdmtx/dmtxsymbol.c \
    $$PWD/libdmtx/dmtxtime.c \
    $$PWD/libdmtx/dmtxvector2.c

使用
在.pro添加

include($$PWD/libdmtx.pri)

它给的例子是使用opencv的cv::mat,这里我们用QImage取代它

#include "libdmtx/dmtx.h"

int QRCodeTool::dataMatrixDecode(const QString &imageName)
{
    QImage image;
    if(!image.load(imageName)){
        qWarning()<<"image load fail !!!";
        return -1;
    }
    if(image.format() == QImage::Format_Mono){
        image = image.convertToFormat(QImage::Format_ARGB32);
        qDebug()<<"image.format() "<<image.format();
    }

    int pack = DmtxPack32bppXRGB;
    switch(image.format())
    {
    case QImage::Format_ARGB32:
        pack = DmtxPack32bppXRGB;
        break;
    case QImage::Format_RGB32:
        pack = DmtxPack32bppXRGB;
        break;
    case QImage::Format_RGB888:
        pack = DmtxPack24bppRGB;
        break;
    case QImage::Format_Indexed8:
        pack = DmtxPack8bppK;
        break;
    case  QImage::Format_Grayscale8:
        pack = DmtxPack8bppK;
    }
    int width = image.width();
    int height = image.height();

    DmtxImage* img = dmtxImageCreate(image.bits(), width, height, pack);//DmtxPack32bppRGBX,DmtxPack24bppRGB
    if (!img) {
        fprintf(stderr, "dmtx image create fail\n");
        return -1;
    }

    DmtxDecode *dec = dmtxDecodeCreate(img, 1);
    DmtxRegion *reg = Q_NULLPTR;
    DmtxMessage *msg = Q_NULLPTR;

    reg = dmtxRegionFindNext(dec, Q_NULLPTR);
    if (reg)  //如果检测到存在DM码区域
    {
        msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);  //解析DM码
        if (msg)  //如果DM码解析成功
        {
            std::cout << "DataMatrix Decode Result: " << msg->output << std::endl;
            dmtxMessageDestroy(&msg);
        }
        dmtxRegionDestroy(&reg);
    }
    dmtxDecodeDestroy(&dec);
    dmtxImageDestroy(&img);
    return 0;
}

生成一维码/二维码

https://blog.csdn.net/u012020854/article/details/113061811

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值