Udostępnij przez


Skanowanie z aplikacji

W tym temacie opisano sposób skanowania zawartości z aplikacji przy użyciu skanera płaskiego, podajnika lub automatycznie skonfigurowanego źródła skanowania.

ważne interfejsy API

Aby skanować z aplikacji, należy najpierw wygenerować listę dostępnych skanerów, deklarując nowy obiekt DeviceInformation i pobierając typ DeviceClass. Wyświetlane są tylko skanery zainstalowane lokalnie ze sterownikami WIA i dostępne dla aplikacji.

Po wyświetleniu dostępnych skanerów aplikacja może używać ustawień skanowania skonfigurowanych automatycznie na podstawie typu skanera lub po prostu skanować przy użyciu dostępnego płaskiego skanera lub podajnika. Aby można było używać ustawień skonfigurowanych automatycznie, skaner musi być włączony do automatycznej konfiguracji i nie może być wyposażony zarówno w płaski skaner, jak i podajnik. Aby uzyskać więcej informacji, zobacz automatycznie skonfigurowane skanowanie.

Wyliczanie dostępnych skanerów

System Windows nie wykrywa automatycznie skanerów. Aby aplikacja komunikowała się ze skanerem, należy wykonać ten krok. W tym przykładzie wyliczanie urządzenia skanera odbywa się przy użyciu przestrzeni nazw Windows.Devices.Enumeration .

  1. Najpierw dodaj te instrukcje using do pliku definicji klasy.
    using Windows.Devices.Enumeration;
    using Windows.Devices.Scanners;
  1. Następnie zaimplementuj obserwatora urządzeń, aby rozpocząć wyliczanie skanerów. Aby uzyskać więcej informacji, zobacz Enumerate devices (Wyliczanie urządzeń).
    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. Utwórz procedurę obsługi zdarzeń, gdy zostanie dodany skaner.
    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);
             }
       );
    }

Skanuj

  1. Uzyskaj obiekt ImageScanner

Dla każdego typu wyliczenia ImageScannerScanSource, niezależnie od tego, czy jest to domyślny, automatycznie skonfigurowany, flatbedlub Feeder, należy najpierw utworzyć obiekt ImageScanner, wywołując metodę ImageScanner.FromIdAsync.

   ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
  1. Tylko skanuj

Aby przeprowadzić skanowanie przy użyciu ustawień domyślnych, aplikacja korzysta z przestrzeni nazw Windows.Devices.Skaners w celu wybrania skanera i skanowania z tego źródła. Żadne ustawienia skanowania nie są zmieniane. Możliwe skanery są automatycznie konfigurowane, płaskie lub zasilane. Ten typ skanowania najprawdopodobniej spowoduje pomyślną operację skanowania, nawet jeśli skanowanie pochodzi z niewłaściwego źródła, na przykład z płaskiego skanera zamiast z podajnika.

Uwaga Jeśli użytkownik umieszcza dokument do skanowania w podajniku, skanowanie zostanie wykonane z szyby skanera zamiast tego. Jeśli użytkownik spróbuje przeprowadzić skanowanie z pustego modułu informacyjnego, zadanie skanowania nie spowoduje wygenerowania żadnych zeskanowanych plików.  

    var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
        folder).AsTask(cancellationToken.Token, progress);
  1. Skanowanie z automatycznie skonfigurowanego źródła, płaskiego skanera lub podajnika

Twoja aplikacja może używać skanowania automatycznego skonfigurowanego przez urządzenie, aby skanować przy użyciu najbardziej optymalnych ustawień. Dzięki tej opcji samo urządzenie może określić najlepsze ustawienia skanowania, takie jak tryb kolorów i rozdzielczość skanowania, na podstawie skanowanej zawartości. Urządzenie wybiera ustawienia skanowania w czasie wykonywania dla każdego nowego zadania skanowania.

Nuta Nie wszystkie skanery obsługują tę funkcję, dlatego aplikacja musi sprawdzić, czy skaner obsługuje tę funkcję przed użyciem tego ustawienia.

W tym przykładzie aplikacja najpierw sprawdza, czy skaner jest w stanie automatycznie konfigurować, a następnie skanuje. Aby określić skaner płaski lub podajnikowy, po prostu zamień AutoConfigured na Flatbed lub Feeder.

    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);
        ...
    }

Podgląd skanowania

Przed skanowaniem do folderu możesz dodać kod, aby wyświetlić podgląd skanowania. W poniższym przykładzie aplikacja sprawdza, czy skaner Flatbed obsługuje podgląd, a następnie wyświetla podgląd skanowania.

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);

Anulowanie skanowania

Możesz pozwolić użytkownikom na anulowanie zadania skanowania w trakcie jego wykonywania.

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

Skanowanie z postępem

  1. Utwórz obiekt System.Threading.CancellationTokenSource.
cancellationToken = new CancellationTokenSource();
  1. Skonfiguruj procedurę obsługi zdarzeń postępu i uzyskaj postęp skanowania.
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
    var progress = new Progress<UInt32>(ScanProgress);

Skanowanie do biblioteki obrazów

Użytkownicy mogą dynamicznie skanować do dowolnego folderu przy użyciu klasy FolderPicker , ale należy zadeklarować możliwość biblioteki obrazów w manifeście, aby umożliwić użytkownikom skanowanie w tym folderze. Aby uzyskać więcej informacji na temat możliwości aplikacji, zobacz Deklaracje możliwości aplikacji.