diff options
Diffstat (limited to 'src/QR-Code-scanner/QrScanThread.cpp')
| -rw-r--r-- | src/QR-Code-scanner/QrScanThread.cpp | 55 |
1 files changed, 4 insertions, 51 deletions
diff --git a/src/QR-Code-scanner/QrScanThread.cpp b/src/QR-Code-scanner/QrScanThread.cpp index 15f4c030..6421321e 100644 --- a/src/QR-Code-scanner/QrScanThread.cpp +++ b/src/QR-Code-scanner/QrScanThread.cpp @@ -38,62 +38,15 @@ QrScanThread::QrScanThread(QObject *parent) : QThread(parent) ,m_running(true) { - m_scanner.set_handler(*this); } -void QrScanThread::image_callback(zbar::Image &image) -{ - qDebug() << "image_callback : Found Code ! " ; - for(zbar::Image::SymbolIterator sym = image.symbol_begin(); - sym != image.symbol_end(); - ++sym) - if(!sym->get_count()) { - QString data = QString::fromStdString(sym->get_data()); - emit decoded(sym->get_type(), data); - } -} - -void QrScanThread::processZImage(zbar::Image &image) -{ - m_scanner.recycle_image(image); - zbar::Image tmp = image.convert(*(long*)"Y800"); - m_scanner.scan(tmp); - image.set_symbols(tmp.get_symbols()); -} - -bool QrScanThread::zimageFromQImage(const QImage &qimg, zbar::Image &dst) -{ - switch( qimg.format() ){ - case QImage::Format_RGB32 : - case QImage::Format_ARGB32 : - case QImage::Format_ARGB32_Premultiplied : - break; - default : - emit notifyError(QString("Invalid QImage Format !")); - return false; - } - unsigned int bpl( qimg.bytesPerLine() ), width( bpl / 4), height( qimg.height()); - dst.set_size(width, height); - dst.set_format("BGR4"); -#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) - unsigned long datalen = qimg.sizeInBytes(); -#else - unsigned long datalen = qimg.byteCount(); -#endif - dst.set_data(qimg.bits(), datalen); - if((width * 4 != bpl) || (width * height * 4 > datalen)){ - emit notifyError(QString("QImage to Zbar::Image failed !")); - return false; - } - return true; -} void QrScanThread::processQImage(const QImage &qimg) { try { - m_image = QSharedPointer<zbar::Image>(new zbar::Image()); - if( ! zimageFromQImage(qimg, *m_image) ) - return; - processZImage(*m_image); + for (const std::string &code : m_decoder.decode(qimg)) + { + emit decoded(QString::fromStdString(code)); + } } catch(std::exception &e) { qDebug() << "ERROR: " << e.what(); |
