Freigeben über


Scannen aus Ihrer App

In diesem Thema wird beschrieben, wie Sie Inhalte aus Ihrer App mithilfe einer Flachbett-, Einzugs- oder automatisch konfigurierten Scanquelle scannen.

Wichtige APIs

Zum Scannen aus Ihrer App müssen Sie zuerst die verfügbaren Scanner auflisten, indem Sie ein neues DeviceInformation-Objekt deklarieren und den DeviceClass-Typ abrufen. Nur Scanner, die lokal mit WIA-Treibern installiert sind, sind aufgeführt und für Ihre App verfügbar.

Nachdem Ihre App verfügbare Scanner aufgelistet hat, kann sie die automatisch konfigurierten Scaneinstellungen basierend auf dem Scannertyp verwenden oder einfach mithilfe der verfügbaren Flachbett- oder Einzugsscanquelle scannen. Um automatisch konfigurierte Einstellungen zu verwenden, muss der Scanner für die automatische Konfiguration aktiviert sein und darf nicht sowohl mit einem Flachbett- als auch mit einem Einzugsscanner ausgestattet sein. Weitere Informationen finden Sie unter "Automatisch konfiguriertes Scannen".

Aufzählen verfügbarer Scanner

Windows erkennt Scanner nicht automatisch. Sie müssen diesen Schritt ausführen, damit Ihre App mit dem Scanner kommunizieren kann. In diesem Beispiel erfolgt die Scannergeräteaufzählung mit dem Windows.Devices.Enumeration-Namespace.

  1. Fügen Sie zunächst diese using-Anweisungen zu Ihrer Klassendefinitionsdatei hinzu.
    using Windows.Devices.Enumeration;
    using Windows.Devices.Scanners;
  1. Implementieren Sie als Nächstes eine Geräteüberwachung, um mit dem Aufzählen von Scannern zu beginnen. Weitere Informationen finden Sie unter "Aufzählen von Geräten".
    void InitDeviceWatcher()
    {
       // Create a Device Watcher class for type Image Scanner for enumerating scanners
       scannerWatcher = DeviceInformation.CreateWatcher(DeviceClass.ImageScanner);

       scannerWatcher.Added += OnScannerAdded;
       scannerWatcher.Removed += OnScannerRemoved;
       scannerWatcher.EnumerationCompleted += OnScannerEnumerationComplete;
    }
  1. Erstellen Sie einen Ereignishandler für den Fall, dass ein Scanner hinzugefügt wird.
    private async void OnScannerAdded(DeviceWatcher sender,  DeviceInformation deviceInfo)
    {
       await
       MainPage.Current.Dispatcher.RunAsync(
             Windows.UI.Core.CoreDispatcherPriority.Normal,
             () =>
             {
                MainPage.Current.NotifyUser(String.Format("Scanner with device id {0} has been added", deviceInfo.Id), NotifyType.StatusMessage);

                // search the device list for a device with a matching device id
                ScannerDataItem match = FindInList(deviceInfo.Id);

                // If we found a match then mark it as verified and return
                if (match != null)
                {
                   match.Matched = true;
                   return;
                }

                // Add the new element to the end of the list of devices
                AppendToList(deviceInfo);
             }
       );
    }

Überprüfen

  1. Abrufen eines ImageScanner-Objekts

Für jeden ImageScannerScanSource-Enumerationstyp müssen Sie zunächst ein ImageScanner-Objekt erstellen, indem Sie die ImageScanner.FromIdAsync-Methode aufrufen, z. B. "Default", "AutoConfigured", "Flatbed" oder "Feeder".

   ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
  1. Einfach scannen

Um mit den Standardeinstellungen zu scannen, basiert Ihre App auf dem Windows.Devices.Scanners-Namespace , um einen Scanner auszuwählen und aus dieser Quelle zu scannen. Es werden keine Scaneinstellungen geändert. Die möglichen Scanner sind automatisch konfiguriert, flachbett oder feeder. Diese Art von Scan führt wahrscheinlich zu einem erfolgreichen Scanvorgang, auch wenn sie von der falschen Quelle gescannt wird, z. B. Flachbett anstelle des Einzugs.

Hinweis : Wenn der Benutzer das Dokument zum Scannen im Einzug platziert, scannt der Scanner stattdessen aus dem Flachbett. Wenn der Benutzer versucht, von einem leeren Feeder zu scannen, erzeugt der Scanauftrag keine gescannten Dateien.  

    var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
        folder).AsTask(cancellationToken.Token, progress);
  1. Scannen von automatisch konfigurierter, Flachbett- oder Einzugsquelle

Ihre App kann die automatisch konfigurierte Überprüfung des Geräts verwenden, um mit den optimalen Scaneinstellungen zu scannen. Mit dieser Option kann das Gerät selbst die besten Scaneinstellungen ermitteln, z. B. farbmodus und Scanauflösung, basierend auf dem gescannten Inhalt. Das Gerät wählt die Scaneinstellungen zur Laufzeit für jeden neuen Scanauftrag aus.

Hinweis: Nicht alle Scanner unterstützen dieses Feature, daher muss die App überprüfen, ob der Scanner dieses Feature unterstützt, bevor Sie diese Einstellung verwenden.

In diesem Beispiel prüft die App zunächst, ob der Scanner die automatische Konfiguration durchführen kann, und überprüft dann. Um entweder Flachbett- oder Einzugsscanner anzugeben, ersetzen Sie einfach AutoConfigured durch Flachbett oder Einzug.

    if (myScanner.IsScanSourceSupported(ImageScannerScanSource.AutoConfigured))
    {
        ...
        // Scan API call to start scanning with Auto-Configured settings.
        var result = await myScanner.ScanFilesToFolderAsync(
            ImageScannerScanSource.AutoConfigured, folder).AsTask(cancellationToken.Token, progress);
        ...
    }

Vorschau des Scans

Sie können Code hinzufügen, um eine Vorschau des Scans vor dem Scannen in einen Ordner anzuzeigen. Im folgenden Beispiel überprüft die App, ob der Flachbettscanner die Vorschau unterstützt, und zeigt dann eine Vorschau des Scans an.

if (myScanner.IsPreviewSupported(ImageScannerScanSource.Flatbed))
{
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
                // Scan API call to get preview from the flatbed.
                var result = await myScanner.ScanPreviewToStreamAsync(
                    ImageScannerScanSource.Flatbed, stream);

Abbrechen des Scans

Sie können benutzern das Abbrechen des Scanauftrags in der Mitte eines Scans ermöglichen, wie dies der Fall ist.

void CancelScanning()
{
    if (ModelDataContext.ScenarioRunning)
    {
        if (cancellationToken != null)
        {
            cancellationToken.Cancel();
        }                
        DisplayImage.Source = null;
        ModelDataContext.ScenarioRunning = false;
        ModelDataContext.ClearFileList();
    }
}

Scannen mit Fortschritt

  1. Erstellen Sie ein System.Threading.CancellationTokenSource-Objekt .
cancellationToken = new CancellationTokenSource();
  1. Richten Sie den Statusereignishandler ein, und rufen Sie den Status des Scans ab.
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
    var progress = new Progress<UInt32>(ScanProgress);

Scannen in die Bildbibliothek

Benutzer können dynamisch mithilfe der FolderPicker-Klasse in einen beliebigen Ordner scannen, aber Sie müssen die Funktion "Bildbibliothek" im Manifest deklarieren, damit Benutzer in diesen Ordner scannen können. Weitere Informationen zu App-Funktionen finden Sie unter App-Funktionsdeklarationen.