How to process an image, which is acquired from eSCL device?
In This Topic
Here is an example that demonstrates how to acquire images from eSCL device, process images and save only not blank images to a multipage TIFF file:
/// <summary>
/// Acquires images from eSCL image scanning device and processes images.
/// </summary>
public void AcquireImagesFromEsclDeviceAndProcessImages()
{
// create eSCL device manager
using (Vintasoft.EsclImageScanning.EsclDeviceManager deviceManager = new Vintasoft.EsclImageScanning.EsclDeviceManager())
{
// open eSCL device manager
deviceManager.Open();
// wait while the eSCL device manager searches for eSCL devices
System.Threading.Thread.Sleep(deviceManager.DeviceSearchTimeout);
// get count of eSCL devices
int deviceCount = deviceManager.Devices.Count;
if (deviceCount == 0)
{
System.Console.WriteLine("Devices are not found.");
return;
}
// select the first eSCL device
Vintasoft.EsclImageScanning.EsclDevice device = deviceManager.Devices[0];
// open eSCL device
device.Open();
Vintasoft.EsclImageScanning.EsclAcquiredImage acquiredImage = null;
do
{
try
{
// acquire image from eSCL device
acquiredImage = device.AcquireImageSync();
// if image is received
if (acquiredImage != null)
{
System.Console.WriteLine("Image is acquired.");
// process acquired image
ProcessEsclAcquiredImage(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 eSCL device
device.Close();
// close eSCL device manager
deviceManager.Close();
}
System.Console.ReadLine();
}
/// <summary>
/// Processes image, which is acquired from eSCL device.
/// </summary>
private void ProcessEsclAcquiredImage(Vintasoft.EsclImageScanning.EsclAcquiredImage acquiredImage)
{
try
{
// subscribe to the processing events
acquiredImage.Processing += new System.EventHandler<Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingEventArgs>(acquiredImage_Processing);
acquiredImage.Progress += new System.EventHandler<Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingProgressEventArgs>(acquiredImage_Progress);
acquiredImage.Processed += new System.EventHandler<Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessedEventArgs>(acquiredImage_Processed);
// despeckle image
acquiredImage.Despeckle(8, 25, 30, 400);
// deskew image
acquiredImage.Deskew(Vintasoft.EsclImageScanning.ImageProcessing.EsclBorderColor.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.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingEventArgs>(acquiredImage_Processing);
acquiredImage.Progress -= new System.EventHandler<Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingProgressEventArgs>(acquiredImage_Progress);
acquiredImage.Processed -= new System.EventHandler<Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessedEventArgs>(acquiredImage_Processed);
}
}
/// <summary>
/// Image processing is started.
/// </summary>
private void acquiredImage_Processing(object sender, Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingEventArgs e)
{
System.Console.Write(e.Action.ToString() + " ");
}
/// <summary>
/// Image processing is in progress.
/// </summary>
private void acquiredImage_Progress(object sender, Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingProgressEventArgs e)
{
System.Console.Write(".");
}
/// <summary>
/// Image processing is finished.
/// </summary>
private void acquiredImage_Processed(object sender, Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessedEventArgs e)
{
System.Console.WriteLine(" finished");
}
''' <summary>
''' Acquires images from eSCL image scanning device and processes images.
''' </summary>
Public Sub AcquireImagesFromEsclDeviceAndProcessImages()
' create eSCL device manager
Using deviceManager As New Vintasoft.EsclImageScanning.EsclDeviceManager()
' open eSCL device manager
deviceManager.Open()
' wait while the eSCL device manager searches for eSCL devices
System.Threading.Thread.Sleep(deviceManager.DeviceSearchTimeout)
' get count of eSCL 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 eSCL device
Dim device As Vintasoft.EsclImageScanning.EsclDevice = deviceManager.Devices(0)
' open eSCL device
device.Open()
Dim acquiredImage As Vintasoft.EsclImageScanning.EsclAcquiredImage = Nothing
Do
Try
' acquire image from eSCL device
acquiredImage = device.AcquireImageSync()
' if image is received
If acquiredImage IsNot Nothing Then
System.Console.WriteLine("Image is acquired.")
' process acquired image
ProcessEsclAcquiredImage(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 eSCL device
device.Close()
' close eSCL device manager
deviceManager.Close()
End Using
System.Console.ReadLine()
End Sub
''' <summary>
''' Processes image, which is acquired from eSCL device.
''' </summary>
Private Sub ProcessEsclAcquiredImage(acquiredImage As Vintasoft.EsclImageScanning.EsclAcquiredImage)
Try
' subscribe to the processing events
AddHandler acquiredImage.Processing, New System.EventHandler(Of Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingEventArgs)(AddressOf acquiredImage_Processing)
AddHandler acquiredImage.Progress, New System.EventHandler(Of Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingProgressEventArgs)(AddressOf acquiredImage_Progress)
AddHandler acquiredImage.Processed, New System.EventHandler(Of Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessedEventArgs)(AddressOf acquiredImage_Processed)
' despeckle image
acquiredImage.Despeckle(8, 25, 30, 400)
' deskew image
acquiredImage.Deskew(Vintasoft.EsclImageScanning.ImageProcessing.EsclBorderColor.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.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingEventArgs)(AddressOf acquiredImage_Processing)
RemoveHandler acquiredImage.Progress, New System.EventHandler(Of Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingProgressEventArgs)(AddressOf acquiredImage_Progress)
RemoveHandler acquiredImage.Processed, New System.EventHandler(Of Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessedEventArgs)(AddressOf acquiredImage_Processed)
End Try
End Sub
''' <summary>
''' Image processing is started.
''' </summary>
Private Sub acquiredImage_Processing(sender As Object, e As Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingEventArgs)
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.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessingProgressEventArgs)
System.Console.Write(".")
End Sub
''' <summary>
''' Image processing is finished.
''' </summary>
Private Sub acquiredImage_Processed(sender As Object, e As Vintasoft.EsclImageScanning.ImageProcessing.EsclAcquiredImageProcessedEventArgs)
System.Console.WriteLine(" finished")
End Sub