How to save TWAIN acquired image to a JPEG file?
 
            
                In This Topic
            
            
            
            		You can acquire image from TWAIN image scanner and save image as JPEG file by 3 ways:
		
		
		
1. Using JPEG encoder for Native or Memory transfer mode
		
			- This method works with any TWAIN image scanner.
 
			- Image is encoded using internal encoder of SDK.
 
			- JPEG quality can be set using the TwainJpegEncoderSettings.JpegQuality property.
 
			- 
				Image is saved as JPEG file using the AcquiredImage.Save method. 
				
				
			 
			- 
				Here is an example that demonstrates how to acquire not compressed image from TWAIN device and save image as JPEG file using JPEG encoder of SDK:
				
				
    
	
	    
	    
/// <summary>
/// Synchronously acquires not compressed images from TWAIN device and saves images to JPEG files.
/// </summary>
static void AcquireNotCompressedImagesFromTwainDeviceAndSaveImagesToJpegFiles()
{
    // create the device manager
    using (Vintasoft.Twain.DeviceManager deviceManager = new Vintasoft.Twain.DeviceManager())
    {
        // open the device manager
        deviceManager.Open();
        // get reference to the default device
        Vintasoft.Twain.Device device = deviceManager.DefaultDevice;
        // specify that device UI must not be used
        device.ShowUI = false;
        // open the device
        device.Open();
        // specify that Memory transfer mode must be used
        device.TransferMode = Vintasoft.Twain.TransferMode.Memory;
        // acquire images from device
        Vintasoft.Twain.AcquireModalState acquireModalState = Vintasoft.Twain.AcquireModalState.None;
        do
        {
            acquireModalState = device.AcquireModal();
            switch (acquireModalState)
            {
                case Vintasoft.Twain.AcquireModalState.ImageAcquired:
                    // specify JPEG encoder settings
                    Vintasoft.Twain.ImageEncoders.TwainJpegEncoderSettings jpegEncoderSettings =
                        new Vintasoft.Twain.ImageEncoders.TwainJpegEncoderSettings();
                    jpegEncoderSettings.JpegQuality = 50;
                    // save acquired image to a disk, internal SDK encoder will be used
                    device.AcquiredImage.Save("test.jpg", jpegEncoderSettings);
                    // dispose acquired image
                    device.AcquiredImage.Dispose();
                    break;
            }
        }
        while (acquireModalState != Vintasoft.Twain.AcquireModalState.None);
        // close the device
        device.Close();
        // close the device manager
        deviceManager.Close();
    }
}
	     
	 
 
    
	
	    
	    
''' <summary>
''' Synchronously acquires not compressed images from TWAIN device and saves images to JPEG files.
''' </summary>
Private Shared Sub AcquireNotCompressedImagesFromTwainDeviceAndSaveImagesToJpegFiles()
    ' create the device manager
    Using deviceManager As New Vintasoft.Twain.DeviceManager()
        ' open the device manager
        deviceManager.Open()
        ' get reference to the default device
        Dim device As Vintasoft.Twain.Device = deviceManager.DefaultDevice
        ' specify that device UI must not be used
        device.ShowUI = False
        ' open the device
        device.Open()
        ' specify that Memory transfer mode must be used
        device.TransferMode = Vintasoft.Twain.TransferMode.Memory
        ' acquire images from device
        Dim acquireModalState As Vintasoft.Twain.AcquireModalState = Vintasoft.Twain.AcquireModalState.None
        Do
            acquireModalState = device.AcquireModal()
            Select Case acquireModalState
                Case Vintasoft.Twain.AcquireModalState.ImageAcquired
                    ' specify JPEG encoder settings
                    Dim jpegEncoderSettings As New Vintasoft.Twain.ImageEncoders.TwainJpegEncoderSettings()
                    jpegEncoderSettings.JpegQuality = 50
                    ' save acquired image to a disk, internal SDK encoder will be used
                    device.AcquiredImage.Save("test.jpg", jpegEncoderSettings)
                    ' dispose acquired image
                    device.AcquiredImage.Dispose()
                    Exit Select
            End Select
        Loop While acquireModalState <> Vintasoft.Twain.AcquireModalState.None
        ' close the device
        device.Close()
        ' close the device manager
        deviceManager.Close()
    End Using
End Sub
	     
	 
 
			 
		
		
		
		2. Using JPEG encoder for File transfer mode
		
			- TWAIN driver must have built-in JPEG encoder - you can check this with the Device.GetSupportedImageFileFormats method.
 
			- TWAIN driver encodes acquired image and saves directly to disk.
 
			- JPEG compression can be set using the Device.FileFormat property.
 
			- Filename of JPEG file can be set using the Device.FileName property.
 
			- 
				Quality of JPEG file can be set using the Device.FileJpegQuality property.
				
				
			 
			- 
				Here is an example that demonstrates how to specify that TWAIN image scanner should save acquired image directly as JPEG file on disk:
				
				
    
	
	    
	    
/// <summary>
/// Starts synchronous acquisition of image from TWAIN device and specifies that acquired JPEG compressed images must be saved directly to JPEG files on disk.
/// </summary>
static void StartSynchronousTwainScanningAndSpecifyThatJpegCompressedImagesMustBeSavedDirectlyToJpegFiles()
{
    // create the device manager
    using (Vintasoft.Twain.DeviceManager deviceManager = new Vintasoft.Twain.DeviceManager())
    {
        // open the device manager
        deviceManager.Open();
        // get reference to the default device
        Vintasoft.Twain.Device device = deviceManager.DefaultDevice;
        // specify that device UI must not be used
        device.ShowUI = false;
        // open the device
        device.Open();
        // check if device driver can save image to disk as JPEG files
        Vintasoft.Twain.TwainImageFileFormat[] supportedImageFileFormats = device.GetSupportedImageFileFormats();
        bool isJpegFileFormatSupported = false;
        for (int i = 0; i < supportedImageFileFormats.Length; i++)
        {
            if (supportedImageFileFormats[i] == Vintasoft.Twain.TwainImageFileFormat.Jpeg)
            {
                isJpegFileFormatSupported = true;
                break;
            }
        }
        //
        if (!isJpegFileFormatSupported)
        {
            // close the device
            device.Close();
            // close the device manager
            deviceManager.Close();
            //
            return;
        }
        // specify that File transfer mode must be used
        device.TransferMode = Vintasoft.Twain.TransferMode.File;
        // save images as JPEG files
        device.FileFormat = Vintasoft.Twain.TwainImageFileFormat.Jpeg;
        // set JPEG quality
        device.FileJpegQuality = 50;
        int acquiredImageCount = 0;
        // acquire images from device
        Vintasoft.Twain.AcquireModalState acquireModalState;
        do
        {
            acquireModalState = device.AcquireModal();
            switch (acquireModalState)
            {
                case Vintasoft.Twain.AcquireModalState.ImageAcquiring:
                    // set the filename for image
                    device.FileName = string.Format("test{0}.jpg", acquiredImageCount);
                    break;
                case Vintasoft.Twain.AcquireModalState.ImageAcquired:
                    // image is already saved to disk as JPEG file
                    // specify name for next acquired image
                    acquiredImageCount++;
                    break;
            }
        }
        while (acquireModalState != Vintasoft.Twain.AcquireModalState.None);
        // close the device
        device.Close();
        // close the device manager
        deviceManager.Close();
    }
}
	     
	 
 
    
	
	    
	    
''' <summary>
''' Starts synchronous acquisition of image from TWAIN device and specifies that acquired JPEG compressed images must be saved directly to JPEG files on disk.
''' </summary>
Private Shared Sub StartSynchronousTwainScanningAndSpecifyThatJpegCompressedImagesMustBeSavedDirectlyToJpegFiles()
    ' create the device manager
    Using deviceManager As New Vintasoft.Twain.DeviceManager()
        ' open the device manager
        deviceManager.Open()
        ' get reference to the default device
        Dim device As Vintasoft.Twain.Device = deviceManager.DefaultDevice
        ' specify that device UI must not be used
        device.ShowUI = False
        ' open the device
        device.Open()
        ' check if device driver can save image to disk as JPEG files
        Dim supportedImageFileFormats As Vintasoft.Twain.TwainImageFileFormat() = device.GetSupportedImageFileFormats()
        Dim isJpegFileFormatSupported As Boolean = False
        For i As Integer = 0 To supportedImageFileFormats.Length - 1
            If supportedImageFileFormats(i) = Vintasoft.Twain.TwainImageFileFormat.Jpeg Then
                isJpegFileFormatSupported = True
                Exit For
            End If
        Next
        '
        If Not isJpegFileFormatSupported Then
            ' close the device
            device.Close()
            ' close the device manager
            deviceManager.Close()
            '
            Return
        End If
        ' specify that File transfer mode must be used
        device.TransferMode = Vintasoft.Twain.TransferMode.File
        ' save images as JPEG files
        device.FileFormat = Vintasoft.Twain.TwainImageFileFormat.Jpeg
        ' set JPEG quality
        device.FileJpegQuality = 50
        Dim acquiredImageCount As Integer = 0
        ' acquire images from device
        Dim acquireModalState As Vintasoft.Twain.AcquireModalState
        Do
            acquireModalState = device.AcquireModal()
            Select Case acquireModalState
                Case Vintasoft.Twain.AcquireModalState.ImageAcquiring
                    ' set the filename for image
                    device.FileName = String.Format("test{0}.jpg", acquiredImageCount)
                    Exit Select
                Case Vintasoft.Twain.AcquireModalState.ImageAcquired
                    ' image is already saved to disk as JPEG file
                    ' specify name for next acquired image
                    acquiredImageCount += 1
                    Exit Select
            End Select
        Loop While acquireModalState <> Vintasoft.Twain.AcquireModalState.None
        ' close the device
        device.Close()
        ' close the device manager
        deviceManager.Close()
    End Using
End Sub
	     
	 
 
			 
		
		
		
		3. Using Memory transfer mode
		
			- TWAIN driver must have built-in JPEG encoder - you can check this with the Device.GetSupportedImageCompressions method.
 
			- TWAIN driver returns acquired image as JPEG stream.
 
			- JPEG compression can be set using the Device.ImageCompression property.
 
			- 
				Quality of JPEG file can be set using the DeviceCapabilityId.IJpegQuality capability. 
				
				
			 
			- 
				Here is an example that demonstrates how to acquire JPEG compressed image from TWAIN device and save image to a JPEG file:
				
				
    
	
	    
	    
/// <summary>
/// Synchronously acquires JPEG compressed images from TWAIN device and saves images to JPEG files.
/// </summary>
static void AcquireJpegCompressedImagesFromTwainDeviceAndSaveImagesToJpegFiles()
{
    // create the device manager
    using (Vintasoft.Twain.DeviceManager deviceManager = new Vintasoft.Twain.DeviceManager())
    {
        // open the device manager
        deviceManager.Open();
        // get reference to the default device
        Vintasoft.Twain.Device device = deviceManager.DefaultDevice;
        // specify that device UI must not be used
        device.ShowUI = false;
        // open the device
        device.Open();
        // check if device driver can return image data as JPEG stream
        Vintasoft.Twain.TwainImageCompression[] supportedImageCompressions = device.GetSupportedImageCompressions();
        bool isJpegCompressionSupported = false;
        for (int i = 0; i < supportedImageCompressions.Length; i++)
        {
            if (supportedImageCompressions[i] == Vintasoft.Twain.TwainImageCompression.Jpeg)
            {
                isJpegCompressionSupported = true;
                break;
            }
        }
        //
        if (!isJpegCompressionSupported)
        {
            // close the device
            device.Close();
            // close the device manager
            deviceManager.Close();
            //
            return;
        }
        // specify that Memory transfer mode must be used
        device.TransferMode = Vintasoft.Twain.TransferMode.Memory;
        // set JPEG compression for image data
        device.ImageCompression = Vintasoft.Twain.TwainImageCompression.Jpeg;
        // set JPEG quality
        Vintasoft.Twain.DeviceCapability jpegQualityCap = device.Capabilities.Find(Vintasoft.Twain.DeviceCapabilityId.IJpegQuality);
        if (jpegQualityCap != null)
            jpegQualityCap.SetValue((int)50);
        // acquire images from device
        Vintasoft.Twain.AcquireModalState acquireModalState;
        do
        {
            acquireModalState = device.AcquireModal();
            switch (acquireModalState)
            {
                case Vintasoft.Twain.AcquireModalState.ImageAcquired:
                    // save acquired image to disk, SDK will save JPEG stream received from device driver
                    device.AcquiredImage.Save("test.jpg");
                    // dispose the acquired image
                    device.AcquiredImage.Dispose();
                    break;
            }
        }
        while (acquireModalState != Vintasoft.Twain.AcquireModalState.None);
        // close the device
        device.Close();
        // close the device manager
        deviceManager.Close();
    }
}
	     
	 
 
    
	
	    
	    
''' <summary>
''' Synchronously acquires JPEG compressed images from TWAIN device and saves images to JPEG files.
''' </summary>
Private Shared Sub AcquireJpegCompressedImagesFromTwainDeviceAndSaveImagesToJpegFiles()
    ' create the device manager
    Using deviceManager As New Vintasoft.Twain.DeviceManager()
        ' open the device manager
        deviceManager.Open()
        ' get reference to the default device
        Dim device As Vintasoft.Twain.Device = deviceManager.DefaultDevice
        ' specify that device UI must not be used
        device.ShowUI = False
        ' open the device
        device.Open()
        ' check if device driver can return image data as JPEG stream
        Dim supportedImageCompressions As Vintasoft.Twain.TwainImageCompression() = device.GetSupportedImageCompressions()
        Dim isJpegCompressionSupported As Boolean = False
        For i As Integer = 0 To supportedImageCompressions.Length - 1
            If supportedImageCompressions(i) = Vintasoft.Twain.TwainImageCompression.Jpeg Then
                isJpegCompressionSupported = True
                Exit For
            End If
        Next
        '
        If Not isJpegCompressionSupported Then
            ' close the device
            device.Close()
            ' close the device manager
            deviceManager.Close()
            '
            Return
        End If
        ' specify that Memory transfer mode must be used
        device.TransferMode = Vintasoft.Twain.TransferMode.Memory
        ' set JPEG compression for image data
        device.ImageCompression = Vintasoft.Twain.TwainImageCompression.Jpeg
        ' set JPEG quality
        Dim jpegQualityCap As Vintasoft.Twain.DeviceCapability = device.Capabilities.Find(Vintasoft.Twain.DeviceCapabilityId.IJpegQuality)
        If jpegQualityCap IsNot Nothing Then
            jpegQualityCap.SetValue(CInt(50))
        End If
        ' acquire images from device
        Dim acquireModalState As Vintasoft.Twain.AcquireModalState
        Do
            acquireModalState = device.AcquireModal()
            Select Case acquireModalState
                Case Vintasoft.Twain.AcquireModalState.ImageAcquired
                    ' save acquired image to disk, SDK will save JPEG stream received from device driver
                    device.AcquiredImage.Save("test.jpg")
                    ' dispose the acquired image
                    device.AcquiredImage.Dispose()
                    Exit Select
            End Select
        Loop While acquireModalState <> Vintasoft.Twain.AcquireModalState.None
        ' close the device
        device.Close()
        ' close the device manager
        deviceManager.Close()
    End Using
End Sub