0

I am trying to develop an app using Zbar library for SmartEyeGlass that scan QR codes. The app based on sample camera extension.But it doesn't work and I can't see what the problem is. Here is my code;

private void cameraEventOperation(CameraEvent event) {
    if (event.getErrorStatus() != 0) {
        Log.d(Constants.LOG_TAG, "error code = " + event.getErrorStatus());
        return;
    }

    if(event.getIndex() != 0){
        Log.d(Constants.LOG_TAG, "not oparate this event");
        return;
    }

    Bitmap bitmap = null;
    byte[] data = null;


    if ((event.getData() != null) && ((event.getData().length) > 0)) {
        data = event.getData();
        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);



        data1= data;
         /* Instance barcode scanner */
        scanner = new ImageScanner();
        scanner.setConfig(Symbol.QRCODE, Config.X_DENSITY, 2);
        scanner.setConfig(Symbol.QRCODE, Config.Y_DENSITY, 2);
        Image barcode = new Image(width, height, "Y800");
        barcode.setData(data1);
        QRCodeStatus= scanner.scanImage(barcode);


        if (QRCodeStatus != 0) { 
        SymbolSet syms = scanner.getResults();

           for (Symbol kasa : syms) {
                  strValueOfScannedQR = String.valueOf(kasa.getData());
                 intValueOfScannedQR = Integer.valueOf(kasa.getData());
            }

       }
    }

    if (bitmap == null) {
        Log.d(Constants.LOG_TAG, "bitmap == null");
        return;
    }

    if (saveToSdcard == true) {
        String fileName = saveFilePrefix + String.format("%04d", saveFileIndex) + ".jpg";
        new SavePhotoTask(saveFolder,fileName).execute(data);
        saveFileIndex++;
    }

    if (recordingMode == SmartEyeglassControl.Intents.CAMERA_MODE_STILL) {
        Bitmap basebitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        basebitmap.setDensity(DisplayMetrics.DENSITY_DEFAULT);
        Canvas canvas = new Canvas(basebitmap);
        Rect rect = new Rect(0, 0, width, height);
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        canvas.drawBitmap(bitmap, rect, rect, paint);

        utils.showBitmap(basebitmap);
        return;
    }

    Log.d(Constants.LOG_TAG, "Camera frame was received : #" + saveFileIndex);
    updateDisplay();
}

private void updateDisplay()
{
    Bitmap displayBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    displayBitmap.setDensity(DisplayMetrics.DENSITY_DEFAULT);
    Canvas canvas = new Canvas(displayBitmap);
    Paint paint = new Paint();
    paint.setStyle(Paint.Style.FILL);
    paint.setTextSize(16);
    paint.setColor(Color.WHITE);
    // Update layout according to the camera mode
    switch (recordingMode) {
        case SmartEyeglassControl.Intents.CAMERA_MODE_STILL:
            canvas.drawText("Tap to capture : STILL", pointX, pointY, paint);
            break;
        case SmartEyeglassControl.Intents.CAMERA_MODE_STILL_TO_FILE:
            canvas.drawText("Tap to capture : STILL TO FILE", pointX, pointY, paint);
            break;



        case SmartEyeglassControl.Intents.CAMERA_MODE_JPG_STREAM_HIGH_RATE:
            if (cameraStarted) {
                canvas.drawText("Frame Number: " + Integer.toString(saveFileIndex), pointBaseX, (pointY * 1), paint);
                canvas.drawText("Value of QR:  " + strValueOfScannedQR, pointBaseX, (pointY * 2), paint);
                canvas.drawText("Data1=" + data1, pointBaseX, (pointY * 3), paint);
                canvas.drawText("QR status  " + QRCodeStatus, pointBaseX, (pointY * 4), paint);


            }
            else {
                canvas.drawText("Tap to start JPEG Stream.", pointBaseX, pointY, paint);
            }
            break;



        case SmartEyeglassControl.Intents.CAMERA_MODE_JPG_STREAM_LOW_RATE:
            if (cameraStarted) {
                canvas.drawText("JPEG Streaming...", pointBaseX, pointY, paint);
                canvas.drawText("Tap to stop.", pointBaseX, (pointY * 2), paint);
                canvas.drawText("Frame Number: " + Integer.toString(saveFileIndex), pointBaseX, (pointY * 3), paint);
            } else {
                canvas.drawText("Tap to start JPEG Stream.", pointBaseX, pointY, paint);
            }
            break;
        default:
            canvas.drawText("wrong recording type.", pointBaseX, pointY, paint);
    }

    utils.showBitmap(displayBitmap);
}

}

1 Answers1

0

Problem seem to be that you are passing data1 as parameter to barcode.setData method.

You should probably pass the bitmap : barcode.setData(bitmap)

This question is rather related to QR code scanning library that you are using. Please also tag it with relevant tag for that library. So you can get support about that library. Please also check what is the requirement for the parameter expected in setData method in API references of your QR code scanning library.

Max Abrahamsson
  • 1,460
  • 3
  • 17
  • 35