Search code examples
xamarin.formsbarcodezxing

How to Read barcode image in Xamarin forms


I am trying to read the text from a QRcode image on my mobile app. I am using Xamarin.Forms with ZXing NuGet package.

I have been able to get the file using Xamarin.Essentials FilePicker. But I don't know how to actually read the barcode. I have looked at some stackoverflow solutions and they all seem to be Xamarin.Android based (using BinaryBitmap objects). I need a solution that can work for iOS and UWP as well. Here is what I have so far:

string file = "";
var filePickerOptions = new PickOptions
{
    PickerTitle = "Select Barcode Image",
    FileTypes = FilePickerFileType.Images
};
var result = await FilePicker.PickAsync(filePickerOptions);
if (result != null)
{
    file = result.FullPath;
    var res = Decode(file, BarcodeFormat.QR_CODE);
    Console.WriteLine(res.Text);
}


public Result Decode(string file, BarcodeFormat? format = null, KeyValuePair<DecodeHintType, object>[] aditionalHints = null)
{
    var r = GetReader(format, aditionalHints);
    /* I need some function here that will allow me to get the BinaryBitmap from the image file path or something along those lines.*/
    var image = GetBinaryBitmap(file);
    var result = r.decode(image);
    return result;
}

MultiFormatReader GetReader(BarcodeFormat? format, KeyValuePair<DecodeHintType, object>[] aditionalHints)
{
    var reader = new MultiFormatReader();

    var hints = new Dictionary<DecodeHintType, object>();

    if (format.HasValue)
    {
        hints.Add(DecodeHintType.POSSIBLE_FORMATS, new List<BarcodeFormat>() { format.Value });
    }
    if (aditionalHints != null)
    {
        foreach (var ah in aditionalHints) 
        {
            hints.Add(ah.Key, ah.Value);
        }
    }

    reader.Hints = hints;

    return reader;
}


Solution

  • https://github.com/Redth/ZXing.Net.Mobile/issues/981. This thread solved it for me. Credit to @jason for this response.