Partial Public Class How_to_process_acquired_image
Inherits Form
''' <summary>
''' TWAIN device manager.
''' </summary>
Private _deviceManager As Vintasoft.Twain.DeviceManager
Public Sub New()
InitializeComponent()
' create and open device manager
_deviceManager = New Vintasoft.Twain.DeviceManager(Me)
_deviceManager.Open()
End Sub
''' <summary>
''' Acquire images asynchronously.
''' </summary>
Public Sub AcquireImagesAsynchronously()
Try
' get reference to the default device
Dim device1 As Vintasoft.Twain.Device = _deviceManager.DefaultDevice
' subscribe to the device events
AddHandler device1.ImageAcquired, New EventHandler(Of Vintasoft.Twain.ImageAcquiredEventArgs)(AddressOf device_ImageAcquired)
AddHandler device1.ScanCanceled, New EventHandler(AddressOf device_ScanCanceled)
AddHandler device1.ScanFailed, New EventHandler(Of Vintasoft.Twain.ScanFailedEventArgs)(AddressOf device_ScanFailed)
AddHandler device1.ScanFinished, New EventHandler(AddressOf device_ScanFinished)
' set scanning settings
device1.TransferMode = Vintasoft.Twain.TransferMode.Memory
device1.ShowUI = False
' acquire images asynchronously
device1.Acquire()
Catch ex As Vintasoft.Twain.TwainException
MessageBox.Show(ex.Message)
End Try
End Sub
''' <summary>
''' Image is acquired.
''' </summary>
Private Sub device_ImageAcquired(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageAcquiredEventArgs)
Dim acquiredImage As Vintasoft.Twain.AcquiredImage = e.Image
' despeckle/deskew/detect border
ProcessAcquiredImage(acquiredImage)
' add image to multipage TIFF file if image is not blank
If Not acquiredImage.IsBlank(0.01F) Then
acquiredImage.Save("d:\test.tif")
End If
' dispose the acquired image
acquiredImage.Dispose()
End Sub
''' <summary>
''' Scan is canceled.
''' </summary>
Private Sub device_ScanCanceled(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("Scan is canceled.")
End Sub
''' <summary>
''' Scan is failed.
''' </summary>
Private Sub device_ScanFailed(ByVal sender As Object, ByVal e As Vintasoft.Twain.ScanFailedEventArgs)
MessageBox.Show("Scan is failed: " + Convert.ToString(e.ErrorString))
End Sub
''' <summary>
''' Scan is finished.
''' </summary>
Private Sub device_ScanFinished(ByVal sender As Object, ByVal e As EventArgs)
Dim device1 As Vintasoft.Twain.Device = DirectCast(sender, Vintasoft.Twain.Device)
' unsubscribe from device events
RemoveHandler device1.ImageAcquired, New EventHandler(Of Vintasoft.Twain.ImageAcquiredEventArgs)(AddressOf device_ImageAcquired)
RemoveHandler device1.ScanCanceled, New EventHandler(AddressOf device_ScanCanceled)
RemoveHandler device1.ScanFailed, New EventHandler(Of Vintasoft.Twain.ScanFailedEventArgs)(AddressOf device_ScanFailed)
RemoveHandler device1.ScanFinished, New EventHandler(AddressOf device_ScanFinished)
' if device is not closed
If device1.State <> Vintasoft.Twain.DeviceState.Closed Then
' close the device
device1.Close()
End If
MessageBox.Show("Scan is finished.")
End Sub
''' <summary>
''' Process the acquired image.
''' </summary>
Private Sub ProcessAcquiredImage(ByVal acquiredImage As Vintasoft.Twain.AcquiredImage)
Console.WriteLine(String.Format("Image ({0})", acquiredImage.ImageInfo))
Try
' subscribe to the processing events
AddHandler acquiredImage.Processing, New EventHandler(Of Vintasoft.Twain.ImageProcessing.AcquiredImageProcessingEventArgs)(AddressOf acquiredImage_Processing)
AddHandler acquiredImage.Progress, New EventHandler(Of Vintasoft.Twain.ImageProcessing.AcquiredImageProcessingProgressEventArgs)(AddressOf acquiredImage_Progress)
AddHandler acquiredImage.Processed, New EventHandler(Of Vintasoft.Twain.ImageProcessing.AcquiredImageProcessedEventArgs)(AddressOf acquiredImage_Processed)
' despeckle image
acquiredImage.Despeckle(8, 25, 30, 400)
' deskew image
acquiredImage.Deskew(Vintasoft.Twain.BorderColor.AutoDetect, 5, 5)
' detect border of image
acquiredImage.DetectBorder(5)
Catch ex As Vintasoft.Twain.ImagingException
Console.WriteLine("Error: " + ex.Message)
Finally
' unsubscribe from the processing events
RemoveHandler acquiredImage.Processing, New EventHandler(Of Vintasoft.Twain.ImageProcessing.AcquiredImageProcessingEventArgs)(AddressOf acquiredImage_Processing)
RemoveHandler acquiredImage.Progress, New EventHandler(Of Vintasoft.Twain.ImageProcessing.AcquiredImageProcessingProgressEventArgs)(AddressOf acquiredImage_Progress)
RemoveHandler acquiredImage.Processed, New EventHandler(Of Vintasoft.Twain.ImageProcessing.AcquiredImageProcessedEventArgs)(AddressOf acquiredImage_Processed)
End Try
End Sub
''' <summary>
''' Image processing is started.
''' </summary>
Private Sub acquiredImage_Processing(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageProcessing.AcquiredImageProcessingEventArgs)
Console.Write(e.Action.ToString() + " ")
End Sub
''' <summary>
''' Image processing is in progress.
''' </summary>
Private Sub acquiredImage_Progress(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageProcessing.AcquiredImageProcessingProgressEventArgs)
Console.Write(".")
End Sub
''' <summary>
''' Image processing is finished.
''' </summary>
Private Sub acquiredImage_Processed(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageProcessing.AcquiredImageProcessedEventArgs)
Console.WriteLine(" finished")
End Sub
End Class