【问题标题】:WinJS Low Memory issue with ZXingZXing 的 WinJS 内存不足问题
【发布时间】:2014-02-04 20:22:34
【问题描述】:

我正在为 Windows 8 Metro App 创建条码扫描器模块。

我的逻辑取得了一些成功,但突然我看到我的应用程序由于内存不足而崩溃。

<script>
        var canvas = null;
        var ctx = null;
        var livePreview = null;
        var count = 0,rescount=0;
        function takepicture() {
            var Capture = Windows.Media.Capture;
             livePreview = document.getElementById("live-preview");
            var mediaCapture = new Capture.MediaCapture();
            canvas = document.getElementById("Vcanvas");
           ctx=canvas.getContext('2d');



           livePreview.addEventListener('play', function () { var i = window.setInterval(function () { ctx.drawImage(livePreview, 0, 0, canvas.width, canvas.height); scanCanvasEasy(); }, 20); }, false);
            livePreview.addEventListener('pause', function () { window.clearInterval(i); }, false);
            livePreview.addEventListener('ended', function () { clearInterval(i); }, false);

            /*
            var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
            openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
            openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.videosLibrary;
            openPicker.fileTypeFilter.replaceAll([".mp4", ".avi", ".ogg"]);
            openPicker.pickSingleFileAsync()
            .then(function (file) {
                if (file) {
                    // draw the image
                    var img = new Image;
                    //img.onload = function () {
                    //    canvas.width = img.width;
                    //    canvas.height = img.height;
                    //    ctx.drawImage(img, 0, 0, img.width, img.height);
                    //    scanCanvasEasy();
                    //}
                    //img.src = URL.createObjectURL(file);
                    // open a stream from the image
                    livePreview.src = URL.createObjectURL(file);
                    livePreview.play();

                }
            })*/
            mediaCapture.initializeAsync().then(function () {

                livePreview.src = URL.createObjectURL(mediaCapture);
                livePreview.play();
            });
        }



        function scanCanvasEasy() {
            var imgd = ctx.getImageData(0, 0,canvas.width,canvas.height);
            var pix = imgd.data;
            var reader = new ZXing.BarcodeReader();
            reader.onresultpointfound = function (resultPoint) {
                // do something with the resultpoint location
                console.log(resultPoint.toString());
            }
            // try to decode the raw pixel data
            var result = reader.decode(pix, canvas.width, canvas.height, ZXing.BitmapFormat.rgba32);
            /*

            The above line cause that memory issue, without that line there is no change in memory level.
            */


            // show the result
            if (result) {
                document.getElementById("result").innerText ="Result(+"+rescount++ +")==>"+ result.text;
            }
            else {
                document.getElementById("error").innerText = "no barcode found" + count++;
            }
      }
      </script>

我发布了我在这里使用的整个代码我只是从按钮单击事件中调用了 takepicture() 方法。

 var result = reader.decode(pix, canvas.width, canvas.height, ZXing.BitmapFormat.rgba32);

此行会导致内存问题。

提前致谢。

【问题讨论】:

    标签: javascript canvas windows-8 zxing winjs


    【解决方案1】:
     var reader = new ZXing.BarcodeReader();
    

    读取器的多个实例导致此问题。刚刚创建了一个 reader 实例并将其用于所有后续扫描将解决该问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2013-08-07
      • 2015-04-15
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      相关资源
      最近更新 更多