android - 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();
}