Чтение qr-кода с Zxing .Net не работает при фотографировании с камеры в WinJS - PullRequest
0 голосов
/ 02 июля 2018

enter image description here - я установил Zxing. Сетевая библиотека для сканирования QR-кода в winJS. Когда Я беру изображение QR-кода из средства выбора файлов, оно работает нормально, но когда я захватить изображение QR-кода с листа бумаги или с любого зарядного устройства устройство и попробуйте, он дает "Нет штрих-кода найдено". Я не мог понять, почему это происходит. Есть ли проблема, когда изображение захват с камеры. Тот же код работал хорошо, когда я использовал API выбора файлов. Дайте мне знать, где я ошибся. Любая помощь будет цениться

    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

...