Scannen Sie Bilder mit der Konsole..NET-Anwendung für Windows und Linux

Blogkategorie: TWAIN.NET

08.042024

TWAIN ist ein Standardprotokoll und eine Schnittstelle (API), die die Interaktion zwischen einem Programm und einem Bildscanner definiert. Der TWAIN-Standard wird von der TWAIN Working Group entwickelt. Version 1 des TWAIN-Standards definiert die Interaktion mit Bildscannern für Windows. Version 2 des TWAIN-Standards definiert die Interaktion mit Bildscannern für Windows, macOS und Linux.
Der TWAIN-Standard ist der beliebteste Standard für Bildscanner unter Windows. Fast jeder Bildscanner verfügt über einen TWAIN-Treiber für die Verwendung unter Windows.
Der TWAIN-Standard ist unter Linux nicht so verbreitet. Unsere Recherchen (Stand Anfang 2024) ergaben, dass nur Kodak TWAIN-Treiber für die Verwendung seiner Bildscanner unter Linux anbietet.

SANE ist eine Programmierschnittstelle (API), die einen standardisierten Zugriff auf Rasterbildscanner (Flachbettscanner, Handscanner usw.) ermöglicht. Die SANE-API ist Public Domain und steht für öffentliche Diskussionen und Weiterentwicklungen offen. Die SANE-API ist die beliebteste Bildscanner-API für Linux.
Viele Scannerhersteller haben SANE-Treiber für ihre Bildscanner entwickelt. Auch die SANE-Community stellt SANE-Treiber bereit. Daher verfügt nahezu jeder moderne Bildscanner über einen SANE-Treiber, der die Nutzung des Geräts unter Linux ermöglicht.

Das VintaSoft Twain .NET SDK ist eine professionelle Bildscan-Bibliothek, mit der sich TWAIN- oder SANE-Scanner steuern und Bilder in .NET-Anwendungen für Windows und Linux erfassen lassen. Die erfassten Bilder können vorverarbeitet und in einer Datei gespeichert oder auf einen HTTP(S)- oder FTP-Server hochgeladen werden.

VintaSoft Twain .NET SDK Die VintaSoft TWAIN .NET API ermöglicht die Arbeit mit TWAIN-Geräten unter Windows und Linux. Das VintaSoft Twain .NET SDK stellt außerdem die VintaSoft SANE .NET API für die Arbeit mit SANE-Geräten unter Linux bereit. Ausführliche Informationen zur VintaSoft TWAIN .NET API und VintaSoft SANE .NET API finden Sie in der Dokumentation für .NET-Entwickler unter: https://www.vintasoft.com/docs/vstwain-dotnet/

Hier ist C#-Code, der zeigt, wie man Bilder von einem TWAIN-Bildscanner unter Windows und Linux erfasst:
/// <summary>
/// Synchronously acquire images images from TWAIN scanner.
/// </summary>
public void SynchronouslyAcquireImagesFromTwainScanner()
{
    try
    {
        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;

            // open the device
            device.Open();

            // set acquisition parameters
            device.TransferMode = Vintasoft.Twain.TransferMode.Memory;
            device.ShowUI = false;
            device.DisableAfterAcquire = true;
            device.PixelType = Vintasoft.Twain.PixelType.BW;

            // create directory for PDF document
            string directoryForImages = System.IO.Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory());
            directoryForImages = System.IO.Path.Combine(directoryForImages, "Images");
            if (!System.IO.Directory.Exists(directoryForImages))
                System.IO.Directory.CreateDirectory(directoryForImages);

            string pdfFilename = System.IO.Path.Combine(directoryForImages, "multipage.pdf");

            // acquire image(s) from the device
            Vintasoft.Twain.AcquireModalState acquireModalState = Vintasoft.Twain.AcquireModalState.None;
            int imageIndex = 0;
            do
            {
                acquireModalState = device.AcquireModal();
                switch (acquireModalState)
                {
                    case Vintasoft.Twain.AcquireModalState.ImageAcquired:
                        // save image to file
                        device.AcquiredImage.Save(pdfFilename);
                        // dispose acquired image
                        device.AcquiredImage.Dispose();
                        // output current state
                        System.Console.WriteLine(string.Format("Image{0} is saved.", imageIndex++));
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanCompleted:
                        // output current state
                        System.Console.WriteLine("Scan completed.");
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanCanceled:
                        // output current state
                        System.Console.WriteLine("Scan canceled.");
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanFailed:
                        // output current state
                        System.Console.WriteLine(string.Format("Scan failed: {0}", device.ErrorString));
                        break;
                }
            }
            while (acquireModalState != Vintasoft.Twain.AcquireModalState.None);

            // close the device
            device.Close();

            // close the device manager
            deviceManager.Close();
        }
    }
    catch (Vintasoft.Twain.TwainException ex)
    {
        System.Console.WriteLine("Error: " + ex.Message);
    }

    System.Console.ReadLine();
}


Hier ist C#-Code, der zeigt, wie man Bilder von einem SANE-Bildscanner unter Linux erfasst:
/// <summary>
/// Synchronously acquire images images from SANE scanner.
/// </summary>
public void SynchronouslyAcquireImagesFromSaneScanner()
{
    // 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();
}