如何在 iOS 10.2 上使用 xamarin forms + zxing 扫描驾照 (PDF417)

How to scan driver's license (PDF417) using xamarin forms + zxing on iOS 10.2

我正在使用 Xamarin 表单编写 iOS 应用程序并使用 ZXing 库扫描条形码。我正在尝试读取驾照 (PDF417) 条形码,但图书馆无法识别该条形码。

如果我在 PossibleFormats 中包含 UPC 或其他条形码,它们将被正确扫描。

我也确定我要读取的条码是 PDF417 条码,因为 Scandit 仅使用 PDF417 条码就能正确识别它。

这是我正在使用的代码。 我需要更改什么才能正确识别 PDF417 条码?

async void Handle_Clicked (object sender, System.EventArgs e)
    {
        MobileBarcodeScanningOptions options = new MobileBarcodeScanningOptions ();
        options.PossibleFormats = new List<ZXing.BarcodeFormat> () {
            ZXing.BarcodeFormat.PDF_417
        };
        options.TryHarder = true;

        var scanPage = new ZXingScannerPage (options);


        scanPage.OnScanResult += (result) => {
            // Stop scanning
            scanPage.IsScanning = false;

            // Pop the page and show the result
            Device.BeginInvokeOnMainThread (async () => {
                await Navigation.PopAsync ();
                await DisplayAlert ("Scanned Barcode", result.Text, "OK");
            });
        };

        // Navigate to our scanner page
        await Navigation.PushAsync (scanPage);
    }

我 运行 几天前遇到了这个完全相同的问题,并用以下方法修复了它。在 MobileBarcodeScanningOptions class 中有一个类型为 CameraResolutionSelectorDelegate 的 属性,名为 CameraResolutionSelector。您可以将其设置为 return 可用分辨率列表中更高的相机分辨率。所以我的 MobileBarcodeScanningOptions 实例化看起来像这样:

var options = new MobileBarcodeScanningOptions {
            TryHarder = true,
            CameraResolutionSelector = HandleCameraResolutionSelectorDelegate,
            PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.PDF_417 }
        };

还有我的HandleCameraResolutionSelectorDelegate

CameraResolution HandleCameraResolutionSelectorDelegate(List<CameraResolution> availableResolutions)
{
    //Don't know if this will ever be null or empty
    if (availableResolutions == null || availableResolutions.Count < 1)
        return new CameraResolution () { Width = 800, Height = 600 };

    //Debugging revealed that the last element in the list
    //expresses the highest resolution. This could probably be more thorough.
    return availableResolutions [availableResolutions.Count - 1];
}

这就是我要扫描驾照 (PDF417) 条形码所需的全部更改。

Here's 来自 ZXing github.

MobileBarcodeScanningOptions.cs 的源代码