首页 > 解决方案 > OnPreviewFrame(IntPtr data, Camera camera) 未被调用 | FastAndroid相机

问题描述

我正在尝试使用此库访问 Android 上的预览帧,然后将 FastJavaByteArray 传递给 Zxing 的 Decode() 方法以扫描预览特定区域中的条形码。预览工作正常,当我使用普通 Preview.SetPreviewCallback(this); 它工作正常并且 OnPreviewFrame(byte[], Camera) 被调用。只是当我使用 Preview.SetNonMarshalingPreviewCallback(this) 时,该方法才没有被调用。我不确定为什么会发生这种情况,我想使用它,这样我就可以使用 Zxing 逐帧扫描条形码。我在下面附上了我的代码。

public void Open() {
            if (!closed) return;
        try {
                Preview = Camera.Open();
            }
            catch (Exception e) {
                Console.WriteLine(e);
            }

            var parameters = Preview.GetParameters();

            int numBytes = (parameters.PreviewSize.Width * parameters.PreviewSize.Height * Android.Graphics.ImageFormat.GetBitsPerPixel(parameters.PreviewFormat)) / 8;
            using (FastJavaByteArray buffer = new FastJavaByteArray(numBytes))
                Preview.AddCallbackBuffer(new FastJavaByteArray(numBytes));

            var options = new ZXing.Mobile.MobileBarcodeScanningOptions();
            options.PossibleFormats.Add(BarcodeFormat.QR_CODE);
            barcodeReader = options.BuildBarcodeReader();

            Preview.SetNonMarshalingPreviewCallback(this);
            //Preview.SetPreviewCallback(this);


            Handler handler = new Handler();
            Action loop = null;
            loop = () =>
            {
                if (!closed)
                {
                    AutoFocusLoop();
                    
                    handler.PostDelayed(loop, (long)(1000 * AF_DELAY));
                }
            };
            handler.Post(loop);

            closed = false;
        }

 public void OnPreviewFrame(IntPtr data, Camera camera)
        {
            throw new NotImplementedException();
        }

标签: androidandroid-camera

解决方案


推荐阅读