]> Nutra Git (v1) - gamesguru/feather.git/commitdiff
QrCodeUtils
authortobtoht <thotbot@protonmail.com>
Thu, 8 Jul 2021 20:21:18 +0000 (22:21 +0200)
committertobtoht <thotbot@protonmail.com>
Thu, 8 Jul 2021 20:21:18 +0000 (22:21 +0200)
src/qrcode_scanner/QrCodeUtils.cpp [new file with mode: 0644]
src/qrcode_scanner/QrCodeUtils.h [new file with mode: 0644]

diff --git a/src/qrcode_scanner/QrCodeUtils.cpp b/src/qrcode_scanner/QrCodeUtils.cpp
new file mode 100644 (file)
index 0000000..fd7b3dc
--- /dev/null
@@ -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;
+}
\ No newline at end of file
diff --git a/src/qrcode_scanner/QrCodeUtils.h b/src/qrcode_scanner/QrCodeUtils.h
new file mode 100644 (file)
index 0000000..10cf7fe
--- /dev/null
@@ -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