1

在此处输入图像描述- 我安装了 Zxing。用于在 winJS 中扫描 QR 码的网络库。当我从文件选择器中获取 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();
    })();

在此处输入图像描述

4

0 回答 0