VintaSoft Twain .NET SDK 15.3: Documentation for .NET developer
In This Topic
    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