Acquire images from SANE scanner synchronously
In This Topic
VintaSoft Twain .NET SDK allows to acquire images from SANE scanner synchronously (in a modal loop).
Here are steps, which should be done for synchronous acquisition of images from SANE device:
- Open SANE device manager.
- Open SANE device.
- Set the scanning settings.
- Start the acquisition modal loop.
- Acquire images from SANE device one by one using SaneLocalDevice.AcquireImageSync method until SaneLocalDevice.HasMoreImagesToScan property returns true.
Here is an example that demonstrates how to synchronously acquire images from SANE device and save acquired images to a PDF document:
/// <summary>
/// Synchronously acquire images from SANE device.
/// </summary>
public void SynchronouslyAcquireImagesFromSaneDevice()
{
// create SANE device manager
using (Vintasoft.Sane.SaneLocalDeviceManager deviceManager = new Vintasoft.Sane.SaneLocalDeviceManager())
{
// open SANE device manager
deviceManager.Open();
// get count of SANE devices
int deviceCount = deviceManager.Devices.Count;
if (deviceCount == 0)
{
System.Console.WriteLine("Devices are not found.");
return;
}
// select the first SANE device
Vintasoft.Sane.SaneLocalDevice device = deviceManager.Devices[0];
// open SANE device
device.Open();
int imageIndex = 0;
Vintasoft.Sane.SaneAcquiredImage acquiredImage;
do
{
try
{
// acquire image from SANE device
acquiredImage = device.AcquireImageSync();
// if image is received
if (acquiredImage != null)
{
imageIndex++;
string filename = string.Format("scannedImage-{0}.png", imageIndex);
if (System.IO.File.Exists(filename))
System.IO.File.Delete(filename);
acquiredImage.Save(filename);
System.Console.WriteLine(string.Format("Acquired image is saved to a file '{0}'.", filename));
}
// 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 device has more images to scan
while (device.HasMoreImagesToScan);
// close SANE device
device.Close();
// close SANE device manager
deviceManager.Close();
}
System.Console.ReadLine();
}
''' <summary>
''' Synchronously acquire images from SANE device.
''' </summary>
Public Sub SynchronouslyAcquireImagesFromSaneDevice()
' create SANE device manager
Using deviceManager As New Vintasoft.Sane.SaneLocalDeviceManager()
' open SANE device manager
deviceManager.Open()
' get count of SANE 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 SANE device
Dim device As Vintasoft.Sane.SaneLocalDevice = deviceManager.Devices(0)
' open SANE device
device.Open()
Dim imageIndex As Integer = 0
Dim acquiredImage As Vintasoft.Sane.SaneAcquiredImage
Do
Try
' acquire image from SANE device
acquiredImage = device.AcquireImageSync()
' if image is received
If acquiredImage IsNot Nothing Then
imageIndex += 1
Dim filename As String = String.Format("scannedImage-{0}.png", imageIndex)
If System.IO.File.Exists(filename) Then
System.IO.File.Delete(filename)
End If
acquiredImage.Save(filename)
System.Console.WriteLine(String.Format("Acquired image is saved to a file '{0}'.", filename))
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 device has more images to scan
Loop While device.HasMoreImagesToScan
' close SANE device
device.Close()
' close SANE device manager
deviceManager.Close()
End Using
System.Console.ReadLine()
End Sub