'Declaration Public Class CameraBarcodeScanner
public class CameraBarcodeScanner
public __gc class CameraBarcodeScanner
public ref class CameraBarcodeScanner
Class provides the optimal CPU load and the best barcode recognition speed when barcodes are recognized in images from a streaming video.
This C#/VB.NET code shows how to capture images from DirectShow camera (VintaSoft Imaging .NET SDK) and recognize barcodes in captured images (VintaSoft Barcode .NET SDK).
Public Partial Class BarcodeScannerExampleForm
Inherits Form
''' <summary>
''' The camera barcode scanner.
''' </summary>
Private _cameraBarcodeScanner As ImagingCameraBarcodeScanner
''' <summary>
''' Initializes a new instance of the <see cref="BarcodeScannerExampleForm"/> class.
''' </summary>
Public Sub New()
InitializeComponent()
_cameraBarcodeScanner = New ImagingCameraBarcodeScanner()
AddHandler _cameraBarcodeScanner.BarcodeScanner.FrameScanFinished, AddressOf BarcodeScanner_FrameScanFinished
AddHandler _cameraBarcodeScanner.ScanningException, AddressOf CameraBarcodeScanner_ScanningException
_cameraBarcodeScanner.BarcodeScanner.ScannerSettings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.QR
End Sub
''' <summary>
''' Starts the capturing of images from seleced device and recognition of barcodes in captured images.
''' </summary>
Private Sub startButton_Click(sender As Object, e As EventArgs)
textBox1.Text = "Scan Barcodes Types: " & _cameraBarcodeScanner.BarcodeScanner.ScannerSettings.ScanBarcodeTypes.ToString()
_cameraBarcodeScanner.CaptureDevice = _cameraBarcodeScanner.CaptureDevices(0)
_cameraBarcodeScanner.StartScanning()
End Sub
''' <summary>
''' Stops the capturing of images from seleced device and recognition of barcodes in captured images.
''' </summary>
Private Sub stopButton_Click(sender As Object, e As EventArgs)
textBox1.Text = ""
_cameraBarcodeScanner.StopScanning()
End Sub
''' <summary>
''' Shows an error.
''' </summary>
Private Sub CameraBarcodeScanner_ScanningException(sender As Object, e As Vintasoft.Imaging.ExceptionEventArgs)
MessageBox.Show(e.Exception.ToString())
End Sub
''' <summary>
''' Handles the FrameScanFinished event of the BarcodeScanner.
''' </summary>
Private Sub BarcodeScanner_FrameScanFinished(sender As Object, e As Vintasoft.Barcode.FrameScanFinishedEventArgs)
If e.FoundBarcodes.Length > 0 Then
Invoke(New ShowRecognitionResultsDelegate(AddressOf ShowRecognitionResults), New Object() {e.FoundBarcodes})
End If
End Sub
''' <summary>
''' Shows barcode recognition results.
''' </summary>
Private Sub ShowRecognitionResults(barcodes As Vintasoft.Barcode.IBarcodeInfo())
Dim result As New StringBuilder()
For Each barcode As Vintasoft.Barcode.IBarcodeInfo In barcodes
result.AppendLine(String.Format("{0}: {1}", barcode.BarcodeType, barcode.Value))
Next
' show barcode recognition in text box
textBox1.Text = result.ToString()
End Sub
Private Delegate Sub ShowRecognitionResultsDelegate(barcodeInfo As Vintasoft.Barcode.IBarcodeInfo())
End Class
''' <summary>
''' Allows to capture images from DirectShow camera (VintaSoft Imaging .NET SDK) and recognize barcodes in captured images (VintaSoft Barcode .NET SDK).
''' </summary>
Public Class ImagingCameraBarcodeScanner
Implements IDisposable
#Region "Fields"
''' <summary>
''' Monitor for capture devices.
''' </summary>
Private _captureDevicesMonitor As Vintasoft.Imaging.Media.ImageCaptureDevicesMonitor
''' <summary>
''' Image capture source for barcode recognition.
''' </summary>
Private _imageCaptureSource As Vintasoft.Imaging.Media.ImageCaptureSource
#End Region
#Region "Constructors"
''' <summary>
''' Initializes a new instance of the <see cref="ImagingCameraBarcodeScanner"/> class.
''' </summary>
Public Sub New()
_barcodeScanner = New Vintasoft.Barcode.CameraBarcodeScanner()
AddHandler _barcodeScanner.FrameScanException, AddressOf BarcodeScanner_FrameScanException
_barcodeScanner.ScannerSettings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Code39 Or Vintasoft.Barcode.BarcodeType.Code128 Or Vintasoft.Barcode.BarcodeType.QR Or Vintasoft.Barcode.BarcodeType.DataMatrix
_captureDevicesMonitor = New Vintasoft.Imaging.Media.ImageCaptureDevicesMonitor()
AddHandler _captureDevicesMonitor.CaptureDevicesChanged, AddressOf CaptureDevicesMonitor_CaptureDevicesChanged
If Not Vintasoft.Imaging.ImagingEnvironment.IsInDesignMode Then
_captureDevicesMonitor.Start()
End If
_imageCaptureSource = New Vintasoft.Imaging.Media.ImageCaptureSource()
AddHandler _imageCaptureSource.CaptureCompleted, AddressOf ImageCaptureSource_CaptureCompleted
End Sub
#End Region
#Region "Properties"
Private _captureDevice As Vintasoft.Imaging.Media.ImageCaptureDevice
''' <summary>
''' Gets or sets current capture device.
''' </summary>
Public Property CaptureDevice() As Vintasoft.Imaging.Media.ImageCaptureDevice
Get
Return _captureDevice
End Get
Set
If _captureDevice IsNot value Then
_captureDevice = value
UpdateCapureFormats()
End If
End Set
End Property
Private _captureFormats As ReadOnlyCollection(Of Vintasoft.Imaging.Media.ImageCaptureFormat) = Nothing
''' <summary>
''' Gets the available capture formats of current capture device.
''' </summary>
''' <seealso cref="CaptureDevice"/>
Public ReadOnly Property CaptureFormats() As ReadOnlyCollection(Of Vintasoft.Imaging.Media.ImageCaptureFormat)
Get
Return _captureFormats
End Get
End Property
''' <summary>
''' Gets available capture devices.
''' </summary>
Public ReadOnly Property CaptureDevices() As ReadOnlyCollection(Of Vintasoft.Imaging.Media.ImageCaptureDevice)
Get
Return Vintasoft.Imaging.Media.ImageCaptureDeviceConfiguration.GetCaptureDevices()
End Get
End Property
Private _barcodeScanner As Vintasoft.Barcode.CameraBarcodeScanner
''' <summary>
''' Gets the barcode scanner.
''' </summary>
Public ReadOnly Property BarcodeScanner() As Vintasoft.Barcode.CameraBarcodeScanner
Get
Return _barcodeScanner
End Get
End Property
''' <summary>
''' Gets a value indicating whether barcode scanning is started.
''' </summary>
Public ReadOnly Property IsStarted() As Boolean
Get
Return _imageCaptureSource.State = Vintasoft.Imaging.Media.ImageCaptureState.Started
End Get
End Property
#End Region
#Region "Methods"
#Region "PUBLIC"
''' <summary>
''' Starts the capturing of images from seleced device and recognition of barcodes in captured images.
''' </summary>
Public Sub StartScanning()
Try
If CaptureDevice Is Nothing Then
Throw New ArgumentNullException("CaptureDevice")
End If
If CaptureFormats Is Nothing OrElse CaptureFormats.Count = 0 Then
Throw New ArgumentNullException("CaptureFormats")
End If
If _imageCaptureSource.State <> Vintasoft.Imaging.Media.ImageCaptureState.Started Then
If CaptureDevice.DesiredFormat Is Nothing Then
CaptureDevice.DesiredFormat = CaptureFormats(0)
End If
_barcodeScanner.StartScanning()
_imageCaptureSource.CaptureDevice = _captureDevice
_imageCaptureSource.Start()
_imageCaptureSource.CaptureAsync()
OnScanningStart(EventArgs.Empty)
End If
Catch ex As Exception
OnScanningException(New Vintasoft.Imaging.ExceptionEventArgs(ex))
End Try
End Sub
''' <summary>
''' Stops the capturing of images from seleced device and recognition of barcodes in captured images.
''' </summary>
Public Sub StopScanning()
Try
If _imageCaptureSource.State <> Vintasoft.Imaging.Media.ImageCaptureState.Stopped Then
_barcodeScanner.StopScanning()
_imageCaptureSource.[Stop]()
OnScanningStop(EventArgs.Empty)
End If
Catch ex As Exception
OnScanningException(New Vintasoft.Imaging.ExceptionEventArgs(ex))
End Try
End Sub
''' <summary>
''' Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
''' </summary>
Public Sub Dispose() Implements IDisposable.Dispose
RemoveHandler _captureDevicesMonitor.CaptureDevicesChanged, AddressOf CaptureDevicesMonitor_CaptureDevicesChanged
_barcodeScanner.BarcodeReader.Dispose()
End Sub
#End Region
#Region "PROTECTED"
''' <summary>
''' Raises the <see cref="CaptureDevicesChanged" /> event.
''' </summary>
''' <param name="args">The <see cref="ImageCaptureDevicesChangedEventArgs"/> instance containing the event data.</param>
Protected Overridable Sub OnCaptureDevicesChanged(args As Vintasoft.Imaging.Media.ImageCaptureDevicesChangedEventArgs)
RaiseEvent CaptureDevicesChanged(Me, args)
End Sub
''' <summary>
''' Raises the <see cref="ScanningException" /> event.
''' </summary>
''' <param name="args">The <see cref="ExceptionEventArgs"/> instance containing the event data.</param>
Protected Overridable Sub OnScanningException(args As Vintasoft.Imaging.ExceptionEventArgs)
RaiseEvent ScanningException(Me, args)
End Sub
''' <summary>
''' Raises the <see cref="ScanningStart" /> event.
''' </summary>
''' <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param>
Protected Overridable Sub OnScanningStart(args As EventArgs)
RaiseEvent ScanningStart(Me, args)
End Sub
''' <summary>
''' Raises the <see cref="ScanningStop" /> event.
''' </summary>
''' <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param>
Protected Overridable Sub OnScanningStop(args As EventArgs)
RaiseEvent ScanningStop(Me, args)
End Sub
#End Region
#Region "PRIVATE"
''' <summary>
''' Handles the FrameScanException event of the BarcodeScanner control.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="Vintasoft.Barcode.FrameScanExceptionEventArgs"/> instance containing the event data.</param>
Private Sub BarcodeScanner_FrameScanException(sender As Object, e As Vintasoft.Barcode.FrameScanExceptionEventArgs)
OnScanningException(New Vintasoft.Imaging.ExceptionEventArgs(e.Exception))
End Sub
''' <summary>
''' Handles the CaptureCompleted event of the ImageCaptureSource.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="ImageCaptureCompletedEventArgs"/> instance containing the event data.</param>
Private Sub ImageCaptureSource_CaptureCompleted(sender As Object, e As Vintasoft.Imaging.Media.ImageCaptureCompletedEventArgs)
Try
' get captured image
Dim image As Vintasoft.Imaging.VintasoftImage = e.GetCapturedImage()
' recognize barcodes from captured image
Using bitmap As Vintasoft.Imaging.VintasoftBitmap = image.GetAsVintasoftBitmap()
_barcodeScanner.ScanFrame(bitmap)
End Using
' if image capturing is started
If _imageCaptureSource.State = Vintasoft.Imaging.Media.ImageCaptureState.Started Then
' capture next image
_imageCaptureSource.CaptureAsync()
End If
Catch ex As Exception
OnScanningException(New Vintasoft.Imaging.ExceptionEventArgs(ex))
End Try
End Sub
''' <summary>
''' Handles the CaptureDevicesChanged event of the CaptureDevicesMonitor.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="ImageCaptureDevicesChangedEventArgs"/> instance containing the event data.</param>
Private Sub CaptureDevicesMonitor_CaptureDevicesChanged(sender As Object, e As Vintasoft.Imaging.Media.ImageCaptureDevicesChangedEventArgs)
If Array.IndexOf(e.RemovedDevices, CaptureDevice) >= 0 Then
StopScanning()
End If
OnCaptureDevicesChanged(e)
End Sub
''' <summary>
''' Updates the capture formats.
''' </summary>
Private Sub UpdateCapureFormats()
Dim device As Vintasoft.Imaging.Media.ImageCaptureDevice = CaptureDevice
If device Is Nothing OrElse device.SupportedFormats Is Nothing Then
_captureFormats = Nothing
Else
Dim captureFormats As New List(Of Vintasoft.Imaging.Media.ImageCaptureFormat)()
Dim imageCaptureFormatSizes As New List(Of UInteger)()
For i As Integer = 0 To device.SupportedFormats.Count - 1
' if format has bit depth less or equal than 12 bit
If device.SupportedFormats(i).BitsPerPixel <= 12 Then
' ignore formats with bit depth less or equal than 12 bit because they may cause issues on Windows 8
Continue For
End If
Dim imageCaptureFormatSize As UInteger = CUInt(device.SupportedFormats(i).Width Or (device.SupportedFormats(i).Height << 16))
If Not imageCaptureFormatSizes.Contains(imageCaptureFormatSize) Then
imageCaptureFormatSizes.Add(imageCaptureFormatSize)
captureFormats.Add(device.SupportedFormats(i))
End If
Next
_captureFormats = captureFormats.AsReadOnly()
End If
End Sub
#End Region
#End Region
#Region "Events"
''' <summary>
''' Occurs when barcode scanning is started.
''' </summary>
Public Event ScanningStart As EventHandler
''' <summary>
''' Occurs when barcode scanning is stopped.
''' </summary>
Public Event ScanningStop As EventHandler
''' <summary>
''' Occurs when barcode scanning error occurs.
''' </summary>
Public Event ScanningException As EventHandler(Of Vintasoft.Imaging.ExceptionEventArgs)
''' <summary>
''' Occurs when <see cref="CaptureDevices"/> property is changed.
''' </summary>
Public Event CaptureDevicesChanged As EventHandler(Of Vintasoft.Imaging.Media.ImageCaptureDevicesChangedEventArgs)
#End Region
End Class
public partial class BarcodeScannerExampleForm : Form
{
/// <summary>
/// The camera barcode scanner.
/// </summary>
ImagingCameraBarcodeScanner _cameraBarcodeScanner;
/// <summary>
/// Initializes a new instance of the <see cref="BarcodeScannerExampleForm"/> class.
/// </summary>
public BarcodeScannerExampleForm()
{
InitializeComponent();
_cameraBarcodeScanner = new ImagingCameraBarcodeScanner();
_cameraBarcodeScanner.BarcodeScanner.FrameScanFinished += BarcodeScanner_FrameScanFinished;
_cameraBarcodeScanner.ScanningException += CameraBarcodeScanner_ScanningException;
_cameraBarcodeScanner.BarcodeScanner.ScannerSettings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.QR;
}
/// <summary>
/// Starts the capturing of images from seleced device and recognition of barcodes in captured images.
/// </summary>
private void startButton_Click(object sender, EventArgs e)
{
textBox1.Text = "Scan Barcodes Types: " + _cameraBarcodeScanner.BarcodeScanner.ScannerSettings.ScanBarcodeTypes.ToString();
_cameraBarcodeScanner.CaptureDevice = _cameraBarcodeScanner.CaptureDevices[0];
_cameraBarcodeScanner.StartScanning();
}
/// <summary>
/// Stops the capturing of images from seleced device and recognition of barcodes in captured images.
/// </summary>
private void stopButton_Click(object sender, EventArgs e)
{
textBox1.Text = "";
_cameraBarcodeScanner.StopScanning();
}
/// <summary>
/// Shows an error.
/// </summary>
private void CameraBarcodeScanner_ScanningException(object sender, Vintasoft.Imaging.ExceptionEventArgs e)
{
MessageBox.Show(e.Exception.ToString());
}
/// <summary>
/// Handles the FrameScanFinished event of the BarcodeScanner.
/// </summary>
private void BarcodeScanner_FrameScanFinished(object sender, Vintasoft.Barcode.FrameScanFinishedEventArgs e)
{
if (e.FoundBarcodes.Length > 0)
Invoke(new ShowRecognitionResultsDelegate(ShowRecognitionResults), new object[] { e.FoundBarcodes });
}
/// <summary>
/// Shows barcode recognition results.
/// </summary>
private void ShowRecognitionResults(Vintasoft.Barcode.IBarcodeInfo[] barcodes)
{
StringBuilder result = new StringBuilder();
foreach (Vintasoft.Barcode.IBarcodeInfo barcode in barcodes)
result.AppendLine(string.Format("{0}: {1}", barcode.BarcodeType, barcode.Value));
// show barcode recognition in text box
textBox1.Text = result.ToString();
}
delegate void ShowRecognitionResultsDelegate(Vintasoft.Barcode.IBarcodeInfo[] barcodeInfo);
}
/// <summary>
/// Allows to capture images from DirectShow camera (VintaSoft Imaging .NET SDK) and recognize barcodes in captured images (VintaSoft Barcode .NET SDK).
/// </summary>
public class ImagingCameraBarcodeScanner : IDisposable
{
#region Fields
/// <summary>
/// Monitor for capture devices.
/// </summary>
Vintasoft.Imaging.Media.ImageCaptureDevicesMonitor _captureDevicesMonitor;
/// <summary>
/// Image capture source for barcode recognition.
/// </summary>
Vintasoft.Imaging.Media.ImageCaptureSource _imageCaptureSource;
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="ImagingCameraBarcodeScanner"/> class.
/// </summary>
public ImagingCameraBarcodeScanner()
{
_barcodeScanner = new Vintasoft.Barcode.CameraBarcodeScanner();
_barcodeScanner.FrameScanException += BarcodeScanner_FrameScanException;
_barcodeScanner.ScannerSettings.ScanBarcodeTypes =
Vintasoft.Barcode.BarcodeType.Code39 |
Vintasoft.Barcode.BarcodeType.Code128 |
Vintasoft.Barcode.BarcodeType.QR |
Vintasoft.Barcode.BarcodeType.DataMatrix;
_captureDevicesMonitor = new Vintasoft.Imaging.Media.ImageCaptureDevicesMonitor();
_captureDevicesMonitor.CaptureDevicesChanged += CaptureDevicesMonitor_CaptureDevicesChanged;
if (!Vintasoft.Imaging.ImagingEnvironment.IsInDesignMode)
_captureDevicesMonitor.Start();
_imageCaptureSource = new Vintasoft.Imaging.Media.ImageCaptureSource();
_imageCaptureSource.CaptureCompleted += ImageCaptureSource_CaptureCompleted;
}
#endregion
#region Properties
Vintasoft.Imaging.Media.ImageCaptureDevice _captureDevice;
/// <summary>
/// Gets or sets current capture device.
/// </summary>
public Vintasoft.Imaging.Media.ImageCaptureDevice CaptureDevice
{
get
{
return _captureDevice;
}
set
{
if (_captureDevice != value)
{
_captureDevice = value;
UpdateCapureFormats();
}
}
}
ReadOnlyCollection<Vintasoft.Imaging.Media.ImageCaptureFormat> _captureFormats = null;
/// <summary>
/// Gets the available capture formats of current capture device.
/// </summary>
/// <seealso cref="CaptureDevice"/>
public ReadOnlyCollection<Vintasoft.Imaging.Media.ImageCaptureFormat> CaptureFormats
{
get
{
return _captureFormats;
}
}
/// <summary>
/// Gets available capture devices.
/// </summary>
public ReadOnlyCollection<Vintasoft.Imaging.Media.ImageCaptureDevice> CaptureDevices
{
get
{
return Vintasoft.Imaging.Media.ImageCaptureDeviceConfiguration.GetCaptureDevices();
}
}
Vintasoft.Barcode.CameraBarcodeScanner _barcodeScanner;
/// <summary>
/// Gets the barcode scanner.
/// </summary>
public Vintasoft.Barcode.CameraBarcodeScanner BarcodeScanner
{
get
{
return _barcodeScanner;
}
}
/// <summary>
/// Gets a value indicating whether barcode scanning is started.
/// </summary>
public bool IsStarted
{
get
{
return _imageCaptureSource.State == Vintasoft.Imaging.Media.ImageCaptureState.Started;
}
}
#endregion
#region Methods
#region PUBLIC
/// <summary>
/// Starts the capturing of images from seleced device and recognition of barcodes in captured images.
/// </summary>
public void StartScanning()
{
try
{
if (CaptureDevice == null)
throw new ArgumentNullException("CaptureDevice");
if (CaptureFormats == null || CaptureFormats.Count == 0)
throw new ArgumentNullException("CaptureFormats");
if (_imageCaptureSource.State != Vintasoft.Imaging.Media.ImageCaptureState.Started)
{
if (CaptureDevice.DesiredFormat == null)
CaptureDevice.DesiredFormat = CaptureFormats[0];
_barcodeScanner.StartScanning();
_imageCaptureSource.CaptureDevice = _captureDevice;
_imageCaptureSource.Start();
_imageCaptureSource.CaptureAsync();
OnScanningStart(EventArgs.Empty);
}
}
catch (Exception ex)
{
OnScanningException(new Vintasoft.Imaging.ExceptionEventArgs(ex));
}
}
/// <summary>
/// Stops the capturing of images from seleced device and recognition of barcodes in captured images.
/// </summary>
public void StopScanning()
{
try
{
if (_imageCaptureSource.State != Vintasoft.Imaging.Media.ImageCaptureState.Stopped)
{
_barcodeScanner.StopScanning();
_imageCaptureSource.Stop();
OnScanningStop(EventArgs.Empty);
}
}
catch (Exception ex)
{
OnScanningException(new Vintasoft.Imaging.ExceptionEventArgs(ex));
}
}
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
_captureDevicesMonitor.CaptureDevicesChanged -= CaptureDevicesMonitor_CaptureDevicesChanged;
_barcodeScanner.BarcodeReader.Dispose();
}
#endregion
#region PROTECTED
/// <summary>
/// Raises the <see cref="CaptureDevicesChanged" /> event.
/// </summary>
/// <param name="args">The <see cref="ImageCaptureDevicesChangedEventArgs"/> instance containing the event data.</param>
protected virtual void OnCaptureDevicesChanged(Vintasoft.Imaging.Media.ImageCaptureDevicesChangedEventArgs args)
{
if (CaptureDevicesChanged != null)
CaptureDevicesChanged(this, args);
}
/// <summary>
/// Raises the <see cref="ScanningException" /> event.
/// </summary>
/// <param name="args">The <see cref="ExceptionEventArgs"/> instance containing the event data.</param>
protected virtual void OnScanningException(Vintasoft.Imaging.ExceptionEventArgs args)
{
if (ScanningException != null)
ScanningException(this, args);
}
/// <summary>
/// Raises the <see cref="ScanningStart" /> event.
/// </summary>
/// <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param>
protected virtual void OnScanningStart(EventArgs args)
{
if (ScanningStart != null)
ScanningStart(this, args);
}
/// <summary>
/// Raises the <see cref="ScanningStop" /> event.
/// </summary>
/// <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param>
protected virtual void OnScanningStop(EventArgs args)
{
if (ScanningStop != null)
ScanningStop(this, args);
}
#endregion
#region PRIVATE
/// <summary>
/// Handles the FrameScanException event of the BarcodeScanner control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Vintasoft.Barcode.FrameScanExceptionEventArgs"/> instance containing the event data.</param>
private void BarcodeScanner_FrameScanException(object sender, Vintasoft.Barcode.FrameScanExceptionEventArgs e)
{
OnScanningException(new Vintasoft.Imaging.ExceptionEventArgs(e.Exception));
}
/// <summary>
/// Handles the CaptureCompleted event of the ImageCaptureSource.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="ImageCaptureCompletedEventArgs"/> instance containing the event data.</param>
private void ImageCaptureSource_CaptureCompleted(object sender, Vintasoft.Imaging.Media.ImageCaptureCompletedEventArgs e)
{
try
{
// get captured image
Vintasoft.Imaging.VintasoftImage image = e.GetCapturedImage();
// recognize barcodes from captured image
using (Vintasoft.Imaging.VintasoftBitmap bitmap = image.GetAsVintasoftBitmap())
_barcodeScanner.ScanFrame(bitmap);
// if image capturing is started
if (_imageCaptureSource.State == Vintasoft.Imaging.Media.ImageCaptureState.Started)
{
// capture next image
_imageCaptureSource.CaptureAsync();
}
}
catch (Exception ex)
{
OnScanningException(new Vintasoft.Imaging.ExceptionEventArgs(ex));
}
}
/// <summary>
/// Handles the CaptureDevicesChanged event of the CaptureDevicesMonitor.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="ImageCaptureDevicesChangedEventArgs"/> instance containing the event data.</param>
private void CaptureDevicesMonitor_CaptureDevicesChanged(object sender, Vintasoft.Imaging.Media.ImageCaptureDevicesChangedEventArgs e)
{
if (Array.IndexOf(e.RemovedDevices, CaptureDevice) >= 0)
{
StopScanning();
}
OnCaptureDevicesChanged(e);
}
/// <summary>
/// Updates the capture formats.
/// </summary>
private void UpdateCapureFormats()
{
Vintasoft.Imaging.Media.ImageCaptureDevice device = CaptureDevice;
if (device == null || device.SupportedFormats == null)
{
_captureFormats = null;
}
else
{
List<Vintasoft.Imaging.Media.ImageCaptureFormat> captureFormats = new List<Vintasoft.Imaging.Media.ImageCaptureFormat>();
List<uint> imageCaptureFormatSizes = new List<uint>();
for (int i = 0; i < device.SupportedFormats.Count; i++)
{
// if format has bit depth less or equal than 12 bit
if (device.SupportedFormats[i].BitsPerPixel <= 12)
{
// ignore formats with bit depth less or equal than 12 bit because they may cause issues on Windows 8
continue;
}
uint imageCaptureFormatSize = (uint)(device.SupportedFormats[i].Width | (device.SupportedFormats[i].Height << 16));
if (!imageCaptureFormatSizes.Contains(imageCaptureFormatSize))
{
imageCaptureFormatSizes.Add(imageCaptureFormatSize);
captureFormats.Add(device.SupportedFormats[i]);
}
}
_captureFormats = captureFormats.AsReadOnly();
}
}
#endregion
#endregion
#region Events
/// <summary>
/// Occurs when barcode scanning is started.
/// </summary>
public event EventHandler ScanningStart;
/// <summary>
/// Occurs when barcode scanning is stopped.
/// </summary>
public event EventHandler ScanningStop;
/// <summary>
/// Occurs when barcode scanning error occurs.
/// </summary>
public event EventHandler<Vintasoft.Imaging.ExceptionEventArgs> ScanningException;
/// <summary>
/// Occurs when <see cref="CaptureDevices"/> property is changed.
/// </summary>
public event EventHandler<Vintasoft.Imaging.Media.ImageCaptureDevicesChangedEventArgs> CaptureDevicesChanged;
#endregion
}
System.Object
 Vintasoft.Barcode.CameraBarcodeScanner
Target Platforms: .NET9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5