QrCodeUtils

This commit is contained in:
tobtoht 2021-07-08 22:21:18 +02:00
parent 30c600fd7c
commit 5175ffd8a5
No known key found for this signature in database
GPG key ID: 1CADD27F41F45C3C
2 changed files with 70 additions and 0 deletions

View file

@ -0,0 +1,53 @@
// SPDX-License-Identifier: BSD-3-Clause
// Copyright (c) 2020-2021, The Monero Project.
#include "QrCodeUtils.h"
#include <QDebug>
bool QrCodeUtils::zimageFromQImage(const QImage &qImg, zbar::Image &dst) {
qDebug() << qImg.format();
switch (qImg.format()) {
case QImage::Format_RGB32 :
case QImage::Format_ARGB32 :
case QImage::Format_ARGB32_Premultiplied :
break;
default :
return false;
}
unsigned int bpl(qImg.bytesPerLine());
unsigned int width(bpl / 4);
unsigned int height(qImg.height());
dst.set_size(width, height);
dst.set_format("BGR4");
unsigned long datalen = qImg.sizeInBytes();
dst.set_data(qImg.bits(), datalen);
if ((width * 4 != bpl) || (width * height * 4 > datalen)) {
return false;
}
return true;
}
QString QrCodeUtils::scanImage(const QImage &img) {
zbar::ImageScanner scanner;
scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
zbar::Image zImg;
int r = zimageFromQImage(img, zImg);
if (!r) {
qWarning() << "Unable to convert QImage into zbar::Image";
return "";
}
zbar::Image scanImg = zImg.convert(*(long*)"Y800");
scanner.scan(scanImg);
QString result;
for (zbar::Image::SymbolIterator sym = scanImg.symbol_begin(); sym != scanImg.symbol_end(); ++sym) {
if (!sym->get_count()) {
result = QString::fromStdString(sym->get_data());
}
}
return result;
}

View file

@ -0,0 +1,17 @@
// SPDX-License-Identifier: BSD-3-Clause
// Copyright (c) 2020-2021, The Monero Project.
#ifndef FEATHER_QRCODEUTILS_H
#define FEATHER_QRCODEUTILS_H
#include <QImage>
#include <zbar.h>
class QrCodeUtils {
public:
static bool zimageFromQImage(const QImage &qImg, zbar::Image &dst);
static QString scanImage(const QImage &img);
};
#endif //FEATHER_QRCODEUTILS_H