Eseguire una digitalizzazione dalla tua app

Questo argomento descrive come analizzare il contenuto dall'app usando un'origine di analisi flat, feeder o configurata automaticamente.

API importanti

Importante

Le API Windows.Devices.Scanners fanno parte della famiglia di dispositividesktop. Le app possono usare queste API solo nella versione desktop di Windows 10.

Per eseguire l'analisi dall'app, in primo luogo è necessario elencare gli scanner disponibili dichiarando un nuovo oggetto DeviceInformation e ottenendo il tipo DeviceClass. Solo gli scanner installati in locale con i driver WIA sono elencati e disponibili per l'app.

Dopo che l'app ha elencato gli scanner disponibili, è possibile usare le impostazioni di scansione configurate automaticamente in base al tipo di scanner o semplicemente eseguire l'analisi usando l'origine di analisi flat o feeder disponibile. Per usare le impostazioni configurate in automatico, lo scanner deve essere abilitato per la configurazione automatica e non deve essere dotato sia di uno scanner flat che di un alimentatore. Per altre info, vedi Analisi configurata automaticamente.

Enumerare gli scanner disponibili

Windows non rileva automaticamente gli scanner. È necessario eseguire questo passaggio per consentire all'app di comunicare con lo scanner. In questo esempio l'enumerazione del dispositivo scanner viene eseguita usando lo spazio dei nomi Windows.Devices.Enumeration.

  1. Prima di tutto, aggiungere queste istruzioni using al file di definizione classe.
    using Windows.Devices.Enumeration;
    using Windows.Devices.Scanners;
  1. Implementare quindi un watcher del dispositivo per avviare l'enumerazione degli scanner. Per altre info, si veda Enumerare i dispositivi.
    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. Creare un gestore eventi per quando viene aggiunto uno scanner.
    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);
             }
       );
    }

Scansione

  1. Ottenere un oggetto ImageScanner

Per ogni tipo di enumerazione ImageScannerScanSource che sia Default, AutoConfigured, Flatbed, o Feeder, per prima cosa è necessario creare un oggetto ImageScanner richiamando il metodo ImageScanner.FromIdAsync in questo modo.

   ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
  1. Basta eseguire la scansione

Per eseguire l'analisi con le impostazioni predefinite, l'app si basa sullo spazio dei nomi Windows.Devices.Scanners per selezionare uno scanner e analizzare da tale origine. Nessuna impostazione di analisi viene modificata. Gli scanner possibili sono l'auto-configurata, la flatbed o la feeder. Questo tipo di scansione produrrà probabilmente un'operazione di analisi riuscita, anche se esegue l'analisi dall'origine errata, ad esempio flatbed anziché feeder.

Nota Se l'utente inserisce il documento da analizzare nel feeder, lo scanner eseguirà invece la l'analisi dal flatbed. Se l'utente tenta di eseguire l'analisi da un feeder vuoto, il processo di analisi non produrrà alcun file analizzato.  

    var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
        folder).AsTask(cancellationToken.Token, progress);
  1. Eseguire la scansione dall'origine configurata automaticamente, flatbed o feeder

L'app può usare la Scansione auto-configurata del dispositivo per eseguire l'analisi con le impostazioni più ottimali. Con questa opzione, il dispositivo stesso può determinare le migliori impostazioni di analisi, ad esempio la modalità colore e la risoluzione dell'analisi, in base al contenuto analizzato. Il dispositivo seleziona le impostazioni di analisi in fase di esecuzione per ogni nuovo processo di scansione.

Nota Non tutti gli scanner supportano questa funzionalità, quindi l'app deve verificare se lo scanner supporta questa funzionalità prima di usare questa impostazione.

In questo esempio, l'app controlla innanzitutto se lo scanner è in grado di configurare automaticamente e quindi analizza. Per specificare lo scanner flatbed o feeder, è sufficiente sostituire AutoConfigured con Flatbed o 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);
        ...
    }

Visualizzare l'anteprima della scansione

È possibile aggiungere un codice per visualizzare in anteprima l'analisi prima di eseguirla in una cartella. Nell'esempio seguente l'app verifica se lo scanner Flatbed supporta l'anteprima, poi effettua l'anteprima dell'analisi.

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

Annulla l'analisi

È possibile consentire agli utenti di annullare il processo di scansione a metà di un'analisi, in questo modo.

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

Scansione con stato

  1. Creare un oggetto System.Threading.CancellationTokenSource.
cancellationToken = new CancellationTokenSource();
  1. Configurare il gestore eventi di stato e ottenere lo stato di avanzamento della scansione.
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
    var progress = new Progress<UInt32>(ScanProgress);

Scansione nella raccolta immagini

Gli utenti possono eseguire dinamicamente la scansione in qualsiasi cartella usando la classe FolderPicker , ma è necessario dichiarare la funzionalità Raccolta di immagini nel manifesto per consentire agli utenti di eseguire la scansione in tale cartella. Per ulteriori informazioni sulle funzionalità dell'app, vedere Dichiarazione di funzionalità dell'app.