'Declaration Public Class CameraBarcodeScanner
public class CameraBarcodeScanner
public __gc class CameraBarcodeScanner
public ref class CameraBarcodeScanner
Класс обеспечивает оптимальную загрузку ЦП и наилучшую скорость распознавания штрих-кодов при распознавании штрих-кодов на изображениях из потокового видео.
Вот C#/VB.NET код, который демонстрирует, как захватывать изображения с камеры DirectShow (VintaSoft Imaging .NET SDK) и распознавать штрих-коды в захваченных изображениях (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
Целевые платформы: .NET 10; .NET 9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5