How to acquire an image area from eSCL scanner?
In This Topic
If you want to acquire an image area (not the whole image) from eSCL scanner, you should add the scan region using
EsclDevice.AddScanRegion method.
The maximum count of allowable scan regions can be get using the
EsclDevice.ScanMaxRegions property.
Current array of scan regions can be get using the
EsclDevice.GetScanRegions method.
Scan regions can be cleared using the
EsclDevice.ClearScanRegions method.
Here is an example that demonstrates how to acquire an image region from eSCL device:
/// <summary>
/// Acquires image area from eSCL device.
/// </summary>
public void AcquireImageRegionFromEsclDevice()
{
// 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();
double scanRegionWidth = 1000;
double? scanMaxWidth = device.GetScanMaxWidth(Vintasoft.EsclImageScanning.EsclScanUnitOfMeasure.ThreeHundredthsOfInches);
if (scanMaxWidth.HasValue)
scanRegionWidth = scanMaxWidth.Value;
double scanRegionHeight = 1000;
double? scanMaxHeight = device.GetScanMaxHeight(Vintasoft.EsclImageScanning.EsclScanUnitOfMeasure.ThreeHundredthsOfInches);
if (scanMaxHeight.HasValue)
scanRegionHeight = scanMaxHeight.Value;
// set new scan area
device.AddScanRegion(
new Vintasoft.Primitives.VintasoftRect(0, 0, scanRegionWidth, scanRegionHeight / 2),
Vintasoft.EsclImageScanning.EsclScanUnitOfMeasure.ThreeHundredthsOfInches);
Vintasoft.EsclImageScanning.EsclAcquiredImage acquiredImage;
do
{
try
{
// acquire image from eSCL device
acquiredImage = device.AcquireImageSync();
// if image is received
if (acquiredImage != null)
{
System.Console.WriteLine("Image is acquired.");
}
// 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>
''' Acquires image area from eSCL device.
''' </summary>
Public Sub AcquireImageRegionFromEsclDevice()
' 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 scanRegionWidth As Integer = 1000
Dim scanMaxWidth As Integer? = device.GetScanMaxWidth(Vintasoft.EsclImageScanning.EsclScanUnitOfMeasure.ThreeHundredthsOfInches)
If scanMaxWidth.HasValue Then
scanRegionWidth = scanMaxWidth.Value
End If
Dim scanRegionHeight As Integer = 1000
Dim scanMaxHeight As Integer? = device.GetScanMaxHeight(Vintasoft.EsclImageScanning.EsclScanUnitOfMeasure.ThreeHundredthsOfInches)
If scanMaxHeight.HasValue Then
scanRegionHeight = scanMaxHeight.Value
End If
' set new scan area
device.AddScanRegion(
New Vintasoft.Primitives.VintasoftRectI(0, 0, scanRegionWidth, scanRegionHeight / 2),
Vintasoft.EsclImageScanning.EsclScanUnitOfMeasure.ThreeHundredthsOfInches)
Dim acquiredImage As Vintasoft.EsclImageScanning.EsclAcquiredImage
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.")
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