How to process an image, which is acquired from WIA device?
In This Topic
Here is an example that demonstrates how to acquire images from WIA device, process images and save only not blank images to a multipage TIFF file:
/// <summary>
/// Acquires images from WIA image scanning device and processes images.
/// </summary>
public void AcquireImagesFromWiaDeviceAndProcessImages()
{
// create WIA device manager
using (Vintasoft.WiaImageScanning.WiaDeviceManager deviceManager = new Vintasoft.WiaImageScanning.WiaDeviceManager())
{
// open WIA device manager
deviceManager.Open();
// get count of WIA devices
int deviceCount = deviceManager.Devices.Count;
if (deviceCount == 0)
{
System.Console.WriteLine("Devices are not found.");
return;
}
// select the first WIA device
Vintasoft.WiaImageScanning.WiaDevice device = deviceManager.Devices[0];
// open WIA device
device.Open();
Vintasoft.WiaImageScanning.WiaAcquiredImage acquiredImage = null;
do
{
try
{
// acquire image from WIA device
acquiredImage = device.AcquireImageSync();
// if image is received
if (acquiredImage != null)
{
System.Console.WriteLine("Image is acquired.");
// process acquired image
ProcessWiaAcquiredImage(acquiredImage);
}
// if image is not received
else
{
System.Console.WriteLine("Scan is completed.");
break;
}
}
catch (System.Exception ex)
{
System.Console.WriteLine(string.Format("Scan is failed: {0}", ex.Message));
break;
}
}
// while image is acquired
while (acquiredImage != null);
// close WIA device
device.Close();
// close WIA device manager
deviceManager.Close();
}
System.Console.ReadLine();
}
/// <summary>
/// Processes image, which is acquired from WIA device.
/// </summary>
private void ProcessWiaAcquiredImage(Vintasoft.WiaImageScanning.WiaAcquiredImage acquiredImage)
{
try
{
// subscribe to the processing events
acquiredImage.Processing += new System.EventHandler<Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingEventArgs>(acquiredImage_Processing);
acquiredImage.Progress += new System.EventHandler<Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingProgressEventArgs>(acquiredImage_Progress);
acquiredImage.Processed += new System.EventHandler<Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessedEventArgs>(acquiredImage_Processed);
// despeckle image
acquiredImage.Despeckle(8, 25, 30, 400);
// deskew image
acquiredImage.Deskew(Vintasoft.WiaImageScanning.ImageProcessing.WiaBorderColor.AutoDetect, 1, 1);
// detect border of image
acquiredImage.DetectBorder(5);
}
catch (System.Exception ex)
{
System.Console.WriteLine("Error: " + ex.Message);
}
finally
{
// unsubscribe from the processing events
acquiredImage.Processing -= new System.EventHandler<Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingEventArgs>(acquiredImage_Processing);
acquiredImage.Progress -= new System.EventHandler<Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingProgressEventArgs>(acquiredImage_Progress);
acquiredImage.Processed -= new System.EventHandler<Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessedEventArgs>(acquiredImage_Processed);
}
}
/// <summary>
/// Image processing is started.
/// </summary>
private void acquiredImage_Processing(object sender, Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingEventArgs e)
{
System.Console.Write(e.Action.ToString() + " ");
}
/// <summary>
/// Image processing is in progress.
/// </summary>
private void acquiredImage_Progress(object sender, Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingProgressEventArgs e)
{
System.Console.Write(".");
}
/// <summary>
/// Image processing is finished.
/// </summary>
private void acquiredImage_Processed(object sender, Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessedEventArgs e)
{
System.Console.WriteLine(" finished");
}
''' <summary>
''' Acquires images from WIA image scanning device and processes images.
''' </summary>
Public Sub AcquireImagesFromWiaDeviceAndProcessImages()
' create WIA device manager
Using deviceManager As New Vintasoft.WiaImageScanning.WiaDeviceManager()
' open WIA device manager
deviceManager.Open()
' get count of WIA devices
Dim deviceCount As Integer = deviceManager.Devices.Count
If deviceCount = 0 Then
System.Console.WriteLine("Devices are not found.")
Return
End If
' select the first WIA device
Dim device As Vintasoft.WiaImageScanning.WiaDevice = deviceManager.Devices(0)
' open WIA device
device.Open()
Dim acquiredImage As Vintasoft.WiaImageScanning.WiaAcquiredImage = Nothing
Do
Try
' acquire image from WIA device
acquiredImage = device.AcquireImageSync()
' if image is received
If acquiredImage IsNot Nothing Then
System.Console.WriteLine("Image is acquired.")
' process acquired image
ProcessWiaAcquiredImage(acquiredImage)
Else
' if image is not received
System.Console.WriteLine("Scan is completed.")
Exit Try
End If
Catch ex As System.Exception
System.Console.WriteLine(String.Format("Scan is failed: {0}", ex.Message))
Exit Try
End Try
' while image is acquired
Loop While acquiredImage IsNot Nothing
' close WIA device
device.Close()
' close WIA device manager
deviceManager.Close()
End Using
System.Console.ReadLine()
End Sub
''' <summary>
''' Processes image, which is acquired from WIA device.
''' </summary>
Private Sub ProcessWiaAcquiredImage(acquiredImage As Vintasoft.WiaImageScanning.WiaAcquiredImage)
Try
' subscribe to the processing events
AddHandler acquiredImage.Processing, New System.EventHandler(Of Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingEventArgs)(AddressOf acquiredImage_Processing)
AddHandler acquiredImage.Progress, New System.EventHandler(Of Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingProgressEventArgs)(AddressOf acquiredImage_Progress)
AddHandler acquiredImage.Processed, New System.EventHandler(Of Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessedEventArgs)(AddressOf acquiredImage_Processed)
' despeckle image
acquiredImage.Despeckle(8, 25, 30, 400)
' deskew image
acquiredImage.Deskew(Vintasoft.WiaImageScanning.ImageProcessing.WiaBorderColor.AutoDetect, 1, 1)
' detect border of image
acquiredImage.DetectBorder(5)
Catch ex As System.Exception
System.Console.WriteLine("Error: " & ex.Message)
Finally
' unsubscribe from the processing events
RemoveHandler acquiredImage.Processing, New System.EventHandler(Of Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingEventArgs)(AddressOf acquiredImage_Processing)
RemoveHandler acquiredImage.Progress, New System.EventHandler(Of Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingProgressEventArgs)(AddressOf acquiredImage_Progress)
RemoveHandler acquiredImage.Processed, New System.EventHandler(Of Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessedEventArgs)(AddressOf acquiredImage_Processed)
End Try
End Sub
''' <summary>
''' Image processing is started.
''' </summary>
Private Sub acquiredImage_Processing(sender As Object, e As Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingEventArgs)
System.Console.Write(e.Action.ToString() & " ")
End Sub
''' <summary>
''' Image processing is in progress.
''' </summary>
Private Sub acquiredImage_Progress(sender As Object, e As Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessingProgressEventArgs)
System.Console.Write(".")
End Sub
''' <summary>
''' Image processing is finished.
''' </summary>
Private Sub acquiredImage_Processed(sender As Object, e As Vintasoft.WiaImageScanning.ImageProcessing.WiaAcquiredImageProcessedEventArgs)
System.Console.WriteLine(" finished")
End Sub