Reading qr code with Zxing .Net is not working when taking photo with camera in WinJS

854 Views Asked by At

enter image description here - I installed Zxing. Net library for scanning a QR code in winJS.When I take a QR code image from file picker it working fine but when I capture image of QR code from piece of paper or from any charger device and try, it gives "No Barcode Found" result .I could not understand why this happening. Is there any problem when image capture from Camera.The same code worked well when I was using the file picker API. Let me know where I went wrong.Any help would be appreciated

    following javascript code :

(
function () {
    "use strict";

    WinJS.Binding.optimizeBindingReferences = true;

    var app = WinJS.Application;
    var activation = Windows.ApplicationModel.Activation;

    app.onactivated = function (args) {
        if (args.detail.kind === activation.ActivationKind.launch) {
            if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
                // TODO: This application has been newly launched. Initialize
                // your application here.

                var dialog = new Windows.Media.Capture.CameraCaptureUI();
                var aspectRatio = { width: 1, height: 1 };
                dialog.photoSettings.croppedAspectRatio = aspectRatio;
                dialog.captureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.photo).then(function (file) {

                    if (file) {
                        // draw the image
                        var canvas = document.getElementById('canvasDecode')
                        var ctx = canvas.getContext('2d');
                        var img = new Image;
                        img.onload = function () {
                            canvas.width = img.width;
                            canvas.height = img.height;
                            ctx.drawImage(img, 0, 0, img.width, img.height);
                        }
                        img.src = URL.createObjectURL(file);
                        // open a stream from the image
                        return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
                    }
                })
                .then(function (stream) {
                    if (stream) {
                        // create a decoder from the image stream
                        return Windows.Graphics.Imaging.BitmapDecoder.createAsync(stream);
                    }
                })
                .done(function (decoder) {
                    if (decoder) {
                        // get the raw pixel data from the decoder
                        decoder.getPixelDataAsync().then(function (pixelDataProvider) {
                            var rawPixels = pixelDataProvider.detachPixelData();
                            var pixels, format; // Assign these in the below switch block.

                            switch (decoder.bitmapPixelFormat) {
                                case Windows.Graphics.Imaging.BitmapPixelFormat.rgba16:
                                    // Allocate a typed array with the raw pixel data
                                    var pixelBufferView_U8 = new Uint8Array(rawPixels);

                                    // Uint16Array provides a typed view into the raw 8 bit pixel data.
                                    pixels = new Uint16Array(pixelBufferView_U8.buffer);
                                    if (decoder.bitmapAlphaMode == Windows.Graphics.Imaging.BitmapAlphaMode.straight)
                                        format = ZXing.BitmapFormat.rgba32;
                                    else
                                        format = ZXing.BitmapFormat.rgb32;
                                    break;

                                case Windows.Graphics.Imaging.BitmapPixelFormat.rgba8:
                                    // For 8 bit pixel formats, just use the returned pixel array.
                                    pixels = rawPixels;
                                    if (decoder.bitmapAlphaMode == Windows.Graphics.Imaging.BitmapAlphaMode.straight)
                                        format = ZXing.BitmapFormat.rgba32;
                                    else
                                        format = ZXing.BitmapFormat.rgb32;
                                    break;

                                case Windows.Graphics.Imaging.BitmapPixelFormat.bgra8:
                                    // For 8 bit pixel formats, just use the returned pixel array.
                                    pixels = rawPixels;
                                    if (decoder.bitmapAlphaMode == Windows.Graphics.Imaging.BitmapAlphaMode.straight)
                                        format = ZXing.BitmapFormat.bgra32;
                                    else
                                        format = ZXing.BitmapFormat.bgr32;
                                    break;
                            }
                            // create a barcode reader
                            var reader = new ZXing.BarcodeReader();
                            reader.onresultpointfound = function (resultPoint) {
                                // do something with the resultpoint location
                            }
                            // try to decode the raw pixel data
                            var result = reader.decode(pixels, decoder.pixelWidth, decoder.pixelHeight, format);
                            // show the result
                            if (result) {
                                document.getElementById("result").innerText = result.text;
                            }
                            else {
                                document.getElementById("result").innerText = "no barcode found";
                            }
                        });
                    }
                });
            } else {
                // TODO: This application has been reactivated from suspension.
                // Restore application state here.
            }
            args.setPromise(WinJS.UI.processAll());
        }
    };

    app.oncheckpoint = function (args) {

    };

    app.start();
    })();

enter image description here

0

There are 0 best solutions below