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.
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.
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.
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.");
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);
CameraPreview project is based on ZXing.Net.Mobile, ZXing.Net and ZXing, thanks for them.