/CameraPreview

This project can help Xamarin developer get the raw image data from camera.

Primary LanguageC#Apache License 2.0Apache-2.0

CameraPreview

CameraPreview project aims to help Xamarin developer to get camera preview more easily. Inspired by ZXing.Net.Mobile, I design a plugins system, based on this system you can add your own plugins easily, like scanning bar code, OCR, and some AI features plugins.

Also, you can create your own overlay above camera view with Xamarin.Froms.

Build Status NuGet NuGet

Usage

The Camera surface will be rendered on ScannerView.

For the settings, you can inherit from ScanningOptionsBase to add your own settings.

The result will come from OnScanResult event or ScanResultCommand Command.

You can use IsScanning to control scanning.

Setup

This project assumes you already get the permission of the camera and init the Camera, so if you didn't get the permission of the camera, it will throw an exception. You can use MediaPlugin to help you get the permissions.

Both iOS and Android you should call init function before Xamarin init.

CameraPreview.iOS.CameraPreviewSettings.Instance.Init(null);
Or
CameraPreview.Droid.CameraPreviewSettings.Instance.Init(null);

If you used plugins, you should call plugins' init function instead of this.

Diagnostics

Implement the ILogger interface to create your own logger and set like this

    public class LoggerImplement : ILogger
    {
        public void Log(string message, LogLevel level)
        {
            System.Diagnostics.Debug.WriteLine(message);
        }
    }

Logger.Instance.LoggerObj = new LoggerImplement();

You can use PerformanceCounter to counter the function running time

var decoder = PerformanceCounter.Start();
PerformanceCounter.Stop(decoder, "ZXing Decoder take {0} ms.");

Plugins

It's very easy to create a plugin for CameraPreview, there's a demo to use ZXing.Net in Plugins/ZXing

In ZXing.Net.Xamarin.Forms project, you can define your own options, result and overlay

In iOS and Droid, you need to create your own decoder, you need to override DefaultDecoderBase class, override Decode function to decode the image when the image comes from preview callback

        // For iOS
        public override IScanResult Decode(CVPixelBuffer pixelBuffer)
        {
        }

        // For Android
        public override IScanResult Decode(Bitmap image)
        {
        }        

ScanningOptionsUpdate function will be called when IsScanning set to true.

public override void ScanningOptionsUpdate(ScanningOptionsBase options)

After you finish the decoder, you need to init CameraPreviewSettings in your own init function like

    public class CameraPreviewSettingsForZXing
    {
        public static void Init()
        {
            CameraPreviewSettings.Instance.Init(new ZXingDecoder());
        }
    }

And call this instead of CameraPreviewSettings.Instance.Init(null);

Thanks

CameraPreview project is based on ZXing.Net.Mobile, ZXing.Net and ZXing, thanks for them.

Buy me a coffee

Via Paypal