VOOZH about

URL: https://www.nuget.org/packages/Camera.MAUI.ZXing

⇱ NuGet Gallery | Camera.MAUI.ZXing 1.0.0




👁 Image
Camera.MAUI.ZXing 1.0.0

dotnet add package Camera.MAUI.ZXing --version 1.0.0
 
 
NuGet\Install-Package Camera.MAUI.ZXing -Version 1.0.0
 
 
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Camera.MAUI.ZXing" Version="1.0.0" />
 
 
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Camera.MAUI.ZXing" Version="1.0.0" />
 
Directory.Packages.props
<PackageReference Include="Camera.MAUI.ZXing" />
 
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Camera.MAUI.ZXing --version 1.0.0
 
 
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Camera.MAUI.ZXing, 1.0.0"
 
 
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Camera.MAUI.ZXing@1.0.0
 
 
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Camera.MAUI.ZXing&version=1.0.0
 
Install as a Cake Addin
#tool nuget:?package=Camera.MAUI.ZXing&version=1.0.0
 
Install as a Cake Tool
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Camera.MAUI/Camera.MAUI.ZXing

A Camera View control and a Barcode Endode/Decode control (based on ZXing.Net) for .NET MAUI applications.

CameraView

A ContetView control for camera management with the next properties:

Android iOS/Mac Windows
Preview
Mirror preview
Flash
Torch
Zoom
Take snapshot
Save snapshot
Barcode detection/decode
Video/audio recording
Take Photo

Install and configure CameraView

  1. Download and Install Camera.MAUI NuGet package on your application.

  2. Download and Install Camera.MAUI.ZXing NuGet package on your application (if you want Barcode detection/decode with ZXing).

  3. Initialize the plugin in your MauiProgram.cs:

    // Add the using to the top
    using Camera.MAUI;
    
    public static MauiApp CreateMauiApp()
    {
    	var builder = MauiApp.CreateBuilder();
    
    	builder
    		.UseMauiApp<App>()
    		.UseMauiCameraView(); // Add the use of the plugging
    
    	return builder.Build();
    }
    
  4. Add camera/microphone permissions to your application:

Android

In your AndroidManifest.xml file (Platforms\Android) add the following permission:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />

iOS/MacCatalyst

In your info.plist file (Platforms\iOS / Platforms\MacCatalyst) add the following permission:

<key>NSCameraUsageDescription</key>
<string>This app uses camera for...</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app needs access to the microphone for record videos</string>

Make sure that you enter a clear and valid reason for your app to access the camera. This description will be shown to the user.

Windows

In your Package.appxmanifest file (Platforms\Windows) go to Capabilities and mark Web Camera and Microphone.

For more information on permissions, see the Microsoft Docs.

Using CameraView

In XAML, make sure to add the right XML namespace:

xmlns:cv="clr-namespace:Camera.MAUI;assembly=Camera.MAUI"

Use the control:

<cv:CameraView x:Name="cameraView" WidthRequest="300" HeightRequest="200"/>

Configure the events:

 cameraView.CamerasLoaded += CameraView_CamerasLoaded;
 cameraView.BarcodeDetected += CameraView_BarcodeDetected;

Configure the camera and microphone to use:

 private void CameraView_CamerasLoaded(object sender, EventArgs e)
 {
 if (cameraView.NumCamerasDetected > 0)
 {
 if (cameraView.NumMicrophonesDetected > 0)
 cameraView.Microphone = cameraView.Microphones.First();
 cameraView.Camera = cameraView.Cameras.First();
 MainThread.BeginInvokeOnMainThread(async () =>
 {
 if (await cameraView.StartCameraAsync() == CameraResult.Success)
 {
 controlButton.Text = "Stop";
 playing = true;
 }
 });
 }
 }

CameraInfo type (Camera Property): CameraInfo has the next properties:

 public string Name
 public string DeviceId
 public CameraPosition Position
 public bool HasFlashUnit
 public float MinZoomFactor
 public float MaxZoomFactor
 public float HorizontalViewAngle
 public float VerticalViewAngle
 public List<Size> AvailableResolutions

Start camera playback:

 if (await cameraView.StartCameraAsync(new Size(1280, 720)) == CameraResult.Success)
 {
 playing = true;
 }

Stop camera playback:

 if (await cameraView.StopCameraAsync() == CameraResult.Success)
 {
 playing = false;
 }

Set Flash mode

cameraView.FlashMode = FlashMode.Auto;

Toggle Torch

cameraView.TorchEnabled = !cameraView.TorchEnabled;

Set mirrored mode

cameraView.MirroredImage = true;

Set zoom factor

if (cameraView.MaxZoomFactor >= 2.5f)
 cameraView.ZoomFactor = 2.5f;

Get a snapshot from the playback

ImageSource imageSource = cameraView.GetSnapShot(ImageFormat.PNG);
bool result = cameraView.SaveSnapShot(ImageFormat.PNG, filePath);

Record a video:

var result = await cameraView.StartRecordingAsync(Path.Combine(FileSystem.Current.CacheDirectory, "Video.mp4"), new Size(1920, 1080));
....
result = await cameraView.StopRecordingAsync();

Take a photo

var stream = await cameraView.TakePhotoAsync();
if (stream != null)
{
 var result = ImageSource.FromStream(() => stream);
 snapPreview.Source = result;
}

Use Control with MVVM: The control has several binding properties for take an snapshot:

 /// Binding property for use this control in MVVM.
 public CameraView Self

 /// Sets how often the SnapShot property is updated in seconds.
 /// Default 0: no snapshots are taken
 /// WARNING! A low frequency directly impacts over control performance and memory usage (with AutoSnapShotAsImageSource = true)
 /// </summary>
 public float AutoSnapShotSeconds
 
 /// Sets the snaphost image format
 public ImageFormat AutoSnapShotFormat

 /// Refreshes according to the frequency set in the AutoSnapShotSeconds property (if AutoSnapShotAsImageSource is set to true) or when GetSnapShot is called or TakeAutoSnapShot is set to true
 public ImageSource SnapShot
 
 /// Refreshes according to the frequency set in the AutoSnapShotSeconds property or when GetSnapShot is called.
 /// WARNING. Each time a snapshot is made, the previous stream is disposed.
 public Stream SnapShotStream
 
 /// Change from false to true refresh SnapShot property
 public bool TakeAutoSnapShot
 
 /// If true SnapShot property is refreshed according to the frequency set in the AutoSnapShotSeconds property
 public bool AutoSnapShotAsImageSource
 /// Starts/Stops the Preview if camera property has been set
 public bool AutoStartPreview
 {
 get { return (bool)GetValue(AutoStartPreviewProperty); }
 set { SetValue(AutoStartPreviewProperty, value); }
 }
 /// Full path to file where record video will be recorded.
 public string AutoRecordingFile
 {
 get { return (string)GetValue(AutoRecordingFileProperty); }
 set { SetValue(AutoRecordingFileProperty, value); }
 }
 /// Starts/Stops record video to AutoRecordingFile if camera and microphone properties have been set
 public bool AutoStartRecording
 {
 get { return (bool)GetValue(AutoStartRecordingProperty); }
 set { SetValue(AutoStartRecordingProperty, value); }
 }
<cv:CameraView x:Name="cameraView" WidthRequest="300" HeightRequest="200"
 BarCodeOptions="{Binding BarCodeOptions}" 
 BarCodeResults="{Binding BarCodeResults, Mode=OneWayToSource}"
 Cameras="{Binding Cameras, Mode=OneWayToSource}" Camera="{Binding Camera}" 
 AutoStartPreview="{Binding AutoStartPreview}" 
 NumCamerasDetected="{Binding NumCameras, Mode=OneWayToSource}"
 AutoSnapShotAsImageSource="True" AutoSnapShotFormat="PNG" 
 TakeAutoSnapShot="{Binding TakeSnapshot}" AutoSnapShotSeconds="{Binding SnapshotSeconds}"
 Microphones="{Binding Microphones, Mode=OneWayToSource}" Microphone="{Binding Microphone}"
 NumMicrophonesDetected="{Binding NumMicrophones, Mode=OneWayToSource}"
 AutoRecordingFile="{Binding RecordingFile}" 
 AutoStartRecording="{Binding AutoStartRecording}"/>

You have a complete example of MVVM in MVVM Example

For barcodes detection, you must set the Camera Control BarCodeDecoder property. Enable and Handle barcodes detection with Camera.MAUI.ZXing:

 using Camera.MAUI.ZXing;
 cameraView.BarcodeDetected += CameraView_BarcodeDetected;
 cameraView.BarCodeDecoder = new ZXingBarcodeDecoder();
 cameraView.BarCodeOptions = new BarcodeDecodeOptions
 {
 AutoRotate = true,
 PossibleFormats = { BarcodeFormat.QR_CODE },
 ReadMultipleCodes = false,
 TryHarder = true,
 TryInverted = true
 };
	cameraView.BarCodeDetectionFrameRate = 10;
 cameraView.BarCodeDetectionMaxThreads = 5;
 cameraView.ControlBarcodeResultDuplicate = true;
	cameraView.BarCodeDetectionEnabled = true;

 private void CameraView_BarcodeDetected(object sender, ZXingHelper.BarcodeEventArgs args)
 {
 Debug.WriteLine("BarcodeText=" + args.Result[0].Text);
 }

Use the event or the bindable property BarCodeResults

 /// Event launched every time a code is detected in the image if "BarCodeDetectionEnabled" is set to true.
 public event BarcodeResultHandler BarcodeDetected;
 /// It refresh each time a barcode is detected if BarCodeDetectionEnabled porperty is true
 public Result[] BarCodeResults

BarcodeImage

A ContentView control for generate codebars images.

In XAML, make sure to add the right XML namespace:

xmlns:cv="clr-namespace:Camera.MAUI;assembly=Camera.MAUI"

Use the control and its bindable properties:

<cv:BarcodeImage x:Name="barcodeImage" Aspect="AspectFit"
 WidthRequest="400" HeightRequest="400" 
 BarcodeWidth="200" BarcodeHeight="200" BarcodeMargin="5"
 BarcodeBackground="White" BarcodeForeground="Blue"
 BarcodeFormat="QR_CODE" />

Set the BarcodeEncoder property to enable de image generator (example with Camera.MAUI.ZXing):

barcodeImage.BarcodeEncoder = new ZXingBarcodeEncoder();

Set the barcode property to generate the image:

barcodeImage.Barcode = "https://github.com/hjam40/Camera.MAUI";
Product Versions Compatible and additional computed target framework versions.
.NET net7.0 net7.0 is compatible.  net7.0-android net7.0-android was computed.  net7.0-android33.0 net7.0-android33.0 is compatible.  net7.0-ios net7.0-ios was computed.  net7.0-ios16.1 net7.0-ios16.1 is compatible.  net7.0-maccatalyst net7.0-maccatalyst was computed.  net7.0-maccatalyst16.1 net7.0-maccatalyst16.1 is compatible.  net7.0-macos net7.0-macos was computed.  net7.0-tvos net7.0-tvos was computed.  net7.0-windows net7.0-windows was computed.  net7.0-windows10.0.19041 net7.0-windows10.0.19041 is compatible.  net8.0 net8.0 is compatible.  net8.0-android net8.0-android was computed.  net8.0-android34.0 net8.0-android34.0 is compatible.  net8.0-browser net8.0-browser was computed.  net8.0-ios net8.0-ios was computed.  net8.0-ios17.2 net8.0-ios17.2 is compatible.  net8.0-maccatalyst net8.0-maccatalyst was computed.  net8.0-maccatalyst17.2 net8.0-maccatalyst17.2 is compatible.  net8.0-macos net8.0-macos was computed.  net8.0-tvos net8.0-tvos was computed.  net8.0-windows net8.0-windows was computed.  net8.0-windows10.0.19041 net8.0-windows10.0.19041 is compatible.  net9.0 net9.0 was computed.  net9.0-android net9.0-android was computed.  net9.0-browser net9.0-browser was computed.  net9.0-ios net9.0-ios was computed.  net9.0-maccatalyst net9.0-maccatalyst was computed.  net9.0-macos net9.0-macos was computed.  net9.0-tvos net9.0-tvos was computed.  net9.0-windows net9.0-windows was computed.  net10.0 net10.0 was computed.  net10.0-android net10.0-android was computed.  net10.0-browser net10.0-browser was computed.  net10.0-ios net10.0-ios was computed.  net10.0-maccatalyst net10.0-maccatalyst was computed.  net10.0-macos net10.0-macos was computed.  net10.0-tvos net10.0-tvos was computed.  net10.0-windows net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Camera.MAUI.ZXing:

Repository Stars
VladislavAntonyuk/MauiSamples
.NET MAUI Samples
Version Downloads Last Updated
1.0.0 196,887 2/29/2024

First version