VintaSoft Twain .NET SDK 14.0: Documentation for .NET developer
In This Topic
    How to use the Dual Stream feature of Kodak scanner?
    In This Topic
    SDK allows to use the Dual Stream feature of Kodak scanners.

    Dual Stream feature means that scanner has some "cameras" and can make some snapshots of each acquired page. Each camera has predefined settings (pixel type and page side) and customizable settings (resolution, brightness, contrast, threshold, filters, etc).

    For example, most of Kodak scanners has 6 cameras:

    Here is an example that demonstrates how to acquire both sides of page as black-white and color images with different resolutions:
    namespace TwainExamples_CSharp
    {
        public partial class How_to_use_Dual_Stream_feature_of_Kodak_scanner : System.Windows.Forms.Form
        {
    
            /// <summary>
            /// TWAIN device manager.
            /// </summary>
            Vintasoft.Twain.DeviceManager _deviceManager;
    
    
    
            public How_to_use_Dual_Stream_feature_of_Kodak_scanner()
            {
                InitializeComponent();
    
                // create and open device manager
                _deviceManager = new Vintasoft.Twain.DeviceManager(this);
                _deviceManager.Open();
            }
    
    
    
            /// <summary>
            /// Acquire images asynchronously.
            /// </summary>
            public void AcquireImagesAsynchronously()
            {
                try
                {
                    // get reference to the default device
                    Vintasoft.Twain.Device device = _deviceManager.DefaultDevice;
    
                    // subscribe to the device events
                    device.ImageAcquired += new System.EventHandler<Vintasoft.Twain.ImageAcquiredEventArgs>(device_ImageAcquired);
                    device.ScanCanceled += new System.EventHandler(device_ScanCanceled);
                    device.ScanFailed += new System.EventHandler<Vintasoft.Twain.ScanFailedEventArgs>(device_ScanFailed);
                    device.ScanFinished += new System.EventHandler(device_ScanFinished);
    
                    // set scanning settings
                    device.TransferMode = Vintasoft.Twain.TransferMode.Memory;
                    device.ShowUI = false;
                   
                    // open the device
                    device.Open();
                    // set inches as units of measure
                    device.UnitOfMeasure = Vintasoft.Twain.UnitOfMeasure.Inches;
                    // enable duplex
                    device.DocumentFeeder.DuplexEnabled = true;
    
                    // select color camera
                    device.Cameras.SetSelectedCamera("/Camera_Color_Both");
                    // set resolution for color images
                    device.Resolution = new Vintasoft.Twain.Resolution(300, 300);
                    // enable color camera
                    device.Cameras.EnableSelectedCamera();
    
                    // select black-white camera
                    device.Cameras.SetSelectedCamera("/Camera_Bitonal_Both");
                    // set resolution for black-white images
                    device.Resolution = new Vintasoft.Twain.Resolution(200, 200);
                    // enable black-white camera
                    device.Cameras.EnableSelectedCamera();
    
                    // acquire images asynchronously
                    device.Acquire();
                }
                catch (Vintasoft.Twain.TwainException ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                }
            }
    
            /// <summary>
            /// Image is acquired.
            /// </summary>
            private void device_ImageAcquired(object sender, Vintasoft.Twain.ImageAcquiredEventArgs e)
            {
                // get info about acquired image
                Vintasoft.Twain.ImageInfo acquiredImageInfo = e.Image.ImageInfo;
                // show message box with info about acquired image
                System.Windows.Forms.MessageBox.Show(string.Format("{0} {1}", acquiredImageInfo.PixelType, acquiredImageInfo.Resolution));
    
                // dispose the acquired image
                e.Image.Dispose();
            }
    
            /// <summary>
            /// Scan is canceled.
            /// </summary>
            private void device_ScanCanceled(object sender, System.EventArgs e)
            {
                System.Windows.Forms.MessageBox.Show("Scan is canceled.");
            }
    
            /// <summary>
            /// Scan is failed.
            /// </summary>
            private void device_ScanFailed(object sender, Vintasoft.Twain.ScanFailedEventArgs e)
            {
                System.Windows.Forms.MessageBox.Show("Scan is failed: " + e.ErrorString);
            }
    
            /// <summary>
            /// Scan is finished.
            /// </summary>
            void device_ScanFinished(object sender, System.EventArgs e)
            {
                Vintasoft.Twain.Device device = (Vintasoft.Twain.Device)sender;
    
                // unsubscribe from device events
                device.ImageAcquired -= new System.EventHandler<Vintasoft.Twain.ImageAcquiredEventArgs>(device_ImageAcquired);
                device.ScanCanceled -= new System.EventHandler(device_ScanCanceled);
                device.ScanFailed -= new System.EventHandler<Vintasoft.Twain.ScanFailedEventArgs>(device_ScanFailed);
                device.ScanFinished -= new System.EventHandler(device_ScanFinished);
    
                // if device is not closed
                if (device.State != Vintasoft.Twain.DeviceState.Closed)
                    // close the device
                    device.Close();
    
                System.Windows.Forms.MessageBox.Show("Scan is finished.");
            }
        }
    }
    
    
    Partial Public Class How_to_use_Dual_Stream_feature_of_Kodak_scanner
        Inherits Form
    
        ''' <summary>
        ''' TWAIN device manager.
        ''' </summary>
        Private _deviceManager As Vintasoft.Twain.DeviceManager
    
    
    
        Public Sub New()
            InitializeComponent()
    
            ' create and open device manager
            _deviceManager = New Vintasoft.Twain.DeviceManager(Me)
            _deviceManager.Open()
        End Sub
    
    
    
        ''' <summary>
        ''' Acquire images asynchronously.
        ''' </summary>
        Public Sub AcquireImagesAsynchronously()
            Try
                ' get reference to the default device
                Dim device1 As Vintasoft.Twain.Device = _deviceManager.DefaultDevice
    
                ' subscribe to the device events
                AddHandler device1.ImageAcquired, New EventHandler(Of Vintasoft.Twain.ImageAcquiredEventArgs)(AddressOf device_ImageAcquired)
                AddHandler device1.ScanCanceled, New EventHandler(AddressOf device_ScanCanceled)
                AddHandler device1.ScanFailed, New EventHandler(Of Vintasoft.Twain.ScanFailedEventArgs)(AddressOf device_ScanFailed)
                AddHandler device1.ScanFinished, New EventHandler(AddressOf device_ScanFinished)
    
                ' set scanning settings
                device1.TransferMode = Vintasoft.Twain.TransferMode.Memory
                device1.ShowUI = False
    
                ' open the device
                device1.Open()
                ' set inches as units of measure
                device1.UnitOfMeasure = Vintasoft.Twain.UnitOfMeasure.Inches
                ' enable duplex
                device1.DocumentFeeder.DuplexEnabled = True
    
                ' select color camera
                device1.Cameras.SetSelectedCamera("/Camera_Color_Both")
                ' set resolution for color images
                device1.Resolution = New Vintasoft.Twain.Resolution(300, 300)
                ' enable color camera
                device1.Cameras.EnableSelectedCamera()
    
                ' select black-white camera
                device1.Cameras.SetSelectedCamera("/Camera_Bitonal_Both")
                ' set resolution for black-white images
                device1.Resolution = New Vintasoft.Twain.Resolution(200, 200)
                ' enable black-white camera
                device1.Cameras.EnableSelectedCamera()
    
                ' acquire images asynchronously
                device1.Acquire()
            Catch ex As Vintasoft.Twain.TwainException
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    
        ''' <summary>
        ''' Image is acquired.
        ''' </summary>
        Private Sub device_ImageAcquired(ByVal sender As Object, ByVal e As Vintasoft.Twain.ImageAcquiredEventArgs)
            ' get info about acquired image
            Dim acquiredImageInfo As Vintasoft.Twain.ImageInfo = e.Image.ImageInfo
            ' show message box with info about acquired image
            MessageBox.Show(String.Format("{0} {1}", acquiredImageInfo.PixelType, acquiredImageInfo.Resolution))
    
            ' dispose the acquired image
            e.Image.Dispose()
        End Sub
    
        ''' <summary>
        ''' Scan is canceled.
        ''' </summary>
        Private Sub device_ScanCanceled(ByVal sender As Object, ByVal e As EventArgs)
            MessageBox.Show("Scan is canceled.")
        End Sub
    
        ''' <summary>
        ''' Scan is failed.
        ''' </summary>
        Private Sub device_ScanFailed(ByVal sender As Object, ByVal e As Vintasoft.Twain.ScanFailedEventArgs)
            MessageBox.Show("Scan is failed: " + Convert.ToString(e.ErrorString))
        End Sub
    
        ''' <summary>
        ''' Scan is finished.
        ''' </summary>
        Private Sub device_ScanFinished(ByVal sender As Object, ByVal e As EventArgs)
            Dim device1 As Vintasoft.Twain.Device = DirectCast(sender, Vintasoft.Twain.Device)
    
            ' unsubscribe from device events
            RemoveHandler device1.ImageAcquired, New EventHandler(Of Vintasoft.Twain.ImageAcquiredEventArgs)(AddressOf device_ImageAcquired)
            RemoveHandler device1.ScanCanceled, New EventHandler(AddressOf device_ScanCanceled)
            RemoveHandler device1.ScanFailed, New EventHandler(Of Vintasoft.Twain.ScanFailedEventArgs)(AddressOf device_ScanFailed)
            RemoveHandler device1.ScanFinished, New EventHandler(AddressOf device_ScanFinished)
    
            ' if device is not closed
            If device1.State <> Vintasoft.Twain.DeviceState.Closed Then
                ' close the device
                device1.Close()
            End If
    
            MessageBox.Show("Scan is finished.")
        End Sub
    
    End Class