'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 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5