ZXing, DataMatrix Reader с опцией цвета TryInverted, похоже, не работает на iOs (Xamarin.Forms) - PullRequest
0 голосов
/ 08 июня 2018

Я занимаюсь разработкой приложения с использованием Xamarin.Forms и Visual Studio, а также пытаюсь использовать пакеты Nuget ZXing.Net.Mobile и ZXing.Net.Mobile.Forms для сканирования DataMatrix.

По умолчанию все работает нормально, кроме случаев, когда DataMatrix печатаются с использованием инвертированных цветов.Вот почему я попытался использовать опцию TryInverted, но, похоже, эта опция не работает с устройствами Apple.

Действительно, с помощью Android мое приложение может обнаруживать DataMatrix даже при инвертированных цветах, а iPhone 5S - нет, только когда цвета не инвертированы.(Я почти уверен, потому что я пытался использовать один и тот же DataMatrix в обеих конфигурациях, инвертированных цветов и нет).Ниже приведен мой код,

var scan = DependencyService.Get<IDScan>();

var options = new ZXing.Mobile.MobileBarcodeScanningOptions();
options.TryInverted = true;
options.TryHarder = true; /* Don't really know if it's needed ?*/
options.AutoRotate = true; 
options.PureBarcode = false; /* Don't really know what is it ?*/

options.PossibleFormats = new List<ZXing.BarcodeFormat>() {
  ZXing.BarcodeFormat.DATA_MATRIX, ZXing.BarcodeFormat.QR_CODE
};

var result = await scan.GetResult(options);

if (result != null)
{
    await App.Current.MainPage.DisplayAlert(
               "Scan result",
               "Format :" + result.BarcodeFormat +
               "\nNumBits : " + result.NumBits +
               "\nValue : " + result.Text,
               "OK"
    );
}

, и мой iOs ScanActivity для получения результата и сканера,

public class ScanActivity : IDScan
{
    ZXing.Mobile.MobileBarcodeScanner scanner;

    public ScanActivity()
    {
        Debug.WriteLine("Scan Android1");
        var window = UIKit.UIApplication.SharedApplication.KeyWindow;
        var vc = window.RootViewController;
        while (vc.PresentedViewController != null)
        {
            vc = vc.PresentedViewController;
        }
        scanner = new ZXing.Mobile.MobileBarcodeScanner(vc);

    }

    public ZXing.Mobile.MobileBarcodeScanner GetScanner()
    {
        return scanner;
    }

    public async Task<ZXing.Result> GetResult(ZXing.Mobile.MobileBarcodeScanningOptions options)
    {
        var result = await scanner.Scan(options,true);
        return result;
    }
}
...