void QQrDecoder::decodeImage(QImage originalImage) { MultiFormatReader decoder; image.setImage(originalImage); Ref<Result> res; try{ Ref<LuminanceSource> imageRef(new CameraImageWrapper(image)); GlobalHistogramBinarizer* binz = new GlobalHistogramBinarizer(imageRef); Ref<Binarizer> bz (binz); BinaryBitmap* bb = new BinaryBitmap(bz); Ref<BinaryBitmap> ref(bb); res = decoder.decode(ref); QString string = QString(res->getText()->getText().c_str()); QMessageBox::information((QWidget*)ui.centralwidget, QString("Decoding result") ,string); } catch(zxing::Exception& e) { // QMessageBox::information((QWidget*)ui.centralwidget, QString("Decoding result"), QString("Error")); } }
/* * viewfinder_callback * * This callback is invoked when an image frame from the camera viewfinder becomes available. * The frame is analyzed to determine if a barcode can be matched. * Frames come in NV12 format which makes code analysis very fast. */ void viewfinder_callback(camera_handle_t handle,camera_buffer_t* buf,void* arg) { camera_frame_nv12_t* data = (camera_frame_nv12_t*)(&(buf->framedesc)); uint8_t* buff = buf->framebuf; int stride = data->stride; int width = data->width; int height = data->height; try { Ref<LuminanceSource> source(new GreyscaleLuminanceSource((unsigned char *)buff, stride, height, 0,0,width,height)); Ref<Binarizer> binarizer(new HybridBinarizer(source)); Ref<BinaryBitmap> bitmap(new BinaryBitmap(binarizer)); Ref<Result> result; // setup the code reader MultiFormatReader *reader = new MultiFormatReader(); DecodeHints *hints = new DecodeHints(); hints->addFormat(BarcodeFormat_QR_CODE); hints->addFormat(BarcodeFormat_EAN_8); hints->addFormat(BarcodeFormat_EAN_13); hints->addFormat(BarcodeFormat_UPC_A); hints->addFormat(BarcodeFormat_UPC_E); hints->addFormat(BarcodeFormat_DATA_MATRIX); hints->addFormat(BarcodeFormat_CODE_128); hints->addFormat(BarcodeFormat_CODE_39); hints->addFormat(BarcodeFormat_ITF); hints->addFormat(BarcodeFormat_AZTEC); // attempt to decode and retrieve a valid QR code from the image bitmap result = reader->decode(bitmap, *hints); std::string newBarcodeData = result->getText()->getText().data(); Json::FastWriter writer; Json::Value root; root["value"] = newBarcodeData; std::string event = "community.barcodescanner.codefound.native"; // notify caller that a valid QR code has been decoded if ( eventDispatcher != NULL){ eventDispatcher->NotifyEvent(event + " " + writer.write(root)); } #ifdef DEBUG fprintf(stderr, "This is the detected Barcode : %s\n", newBarcodeData.c_str()); #endif } catch (const std::exception& ex) { #ifdef DEBUG fprintf( stderr, "error occured : \%s \n", ex.what()); #endif } }