How to acquire images from scanner,camera (or another TWAIN or WIA compatible device) with Bytescout Scan SDK for .NET in Visual C#

This sample code demonstrates how to get images from a scanner or a web-camera or any other TWAIN and WIA compatible device using Bytescout Scan SDK for .NET and Visual C#.

Full sample code is included into the SDK.


Screenshot of C# test application:
screenshot of Visual C#  .NET test application  with Scan SDK

using System;
using System.Collections;
 
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
 
 
using Bytescout.Scan;
using System.IO;
 
namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        // Synchronous scan - temporary unavailable
 
        private void btnScanToImages_Click(object sender, EventArgs e)
        {
             //Scan scan = new Scan();
             //ArrayList images = scan.AcquireImages(this.Handle);
             //FillTabsWithImages(images);
 
        }
 
        // Starts Asynchronous scan into images. When scan is finished then scan_TransferFinished event is called and array with images objects is passed into this event
        private void btnScanToImagesAsync_Click(object sender, EventArgs e)
        {
            // create new Scan object
            Scan scan = new Scan();
 
            // set Scan object to save images into images array (will be passed as a paramtere in scan_TransferFinished event
 
            scan.SaveTo = SaveTo.ImageObject;
 
            // set function for scan finished event to indicate when image transfer is finished
            scan.TransferFinished += new TransferFinishedEventHandler(scan_TransferFinished); // see scan_TransferFinished event below
 
            // acquire images
            scan.AcquireImagesAsync(this.Handle);
        }
 
        // this event captures scanned images and fills images into tabs
 
        // you can also iterate through scannedImages array to get each image as an Image object instead
        void scan_TransferFinished(Scan sender, ArrayList scannedImages)
        {
            FillTabsWithImages(scannedImages);
        }
 
        // this function puts retrieved images objects into tabs on the form
        private void FillTabsWithImages(ArrayList images)
        {
            tabControl1.TabPages.Clear();
 
            for (int i = 0; i < images.Count; i++)
            {
                TabPage page = new TabPage();
 
                PictureBox pb = new PictureBox();
                pb.Dock = DockStyle.Fill;
                pb.SizeMode = PictureBoxSizeMode.Zoom;
 
                if (images[i] is Image)
                {
                    page.Text = "Image " + (i + 1).ToString();
                    pb.Image = (Image) images[i];
                }
                else
 
                {
                    page.Text = (String) images[i];
                    pb.Image = Image.FromFile((String) images[i]);
                }
 
                page.Controls.Add(pb);
 
                tabControl1.TabPages.Add(page);
            }
        }
 
        // acquire images into files automatically saved into the given folder with given image format and filename
        private void btnScanToFilesAsync_Click(object sender, EventArgs e)
        {
            // create new Scan object
            Scan scan = new Scan();
 
            // set SDK to save images into files
 
            scan.SaveTo = SaveTo.File;
            // scan.FileNamingTemplate = "ScannedImage_{0:D2}"; // you can set output filename template
            // set output format as JPG image format
            scan.OutputFormat = OutputFormat.JPEG;
 
            // you can set output folder as well, by default output folder is the same where executable .exe is running            
            //scan.OutputFolder = Path.GetTempPath();
 
 
            // assign the event to indicate when image transfer is finished
 
            scan.TransferFinished += new TransferFinishedEventHandler(scan_TransferFinished);
 
            // acquire images
            scan.AcquireImagesAsync(this.Handle);
        }
 
        // displays ready-to-use options dialog for the scan SDK
        private void btnOptions_Click(object sender, EventArgs e)
        {
            Scan.ShowOptionsDialog(new Scan());
        }
    }
}
 
 
Filed in: Scan SDK