Digitalizar de seu aplicativo

Este tópico descreve como verificar o conteúdo de seu aplicativo usando uma fonte de verificação simples, alimentador ou configurada automaticamente.

APIs importantes

Importante

As APIs Windows.Devices.Scanners fazem parte da família de dispositivos da área de trabalho. Os aplicativos podem usar essas APIs somente na versão para a área de trabalho do Windows 10.

Para digitalizar de seu aplicativo, você deve primeiro listar os scanners disponíveis declarando um novo objeto DeviceInformation e obtendo o tipo DeviceClass. Somente scanners instalados localmente com drivers WIA são listados e disponibilizados a seu aplicativo.

Depois que seu aplicativo relacionou os scanners disponíveis, ele pode usar as configurações de digitalização configuradas automaticamente, com base no tipo de scanner, ou somente digitalizar usando a fonte de digitalização do scanner de mesa ou do alimentador disponível. Para usar as configurações definidas automaticamente, o verificador deve ser habilitado para configuração automática e não deve ser equipado com um scanner de alimentação e um flatbed. Para obter mais informações, consulte Digitalização Configurada Automaticamente.

Enumerar os scanners disponíveis

O Windows não detecta scanners automaticamente. Você deve executar essa etapa para que seu aplicativo se comunique com o scanner. Nesse exemplo, a enumeração do dispositivo de scanner é feita usando o namespace Windows.Devices.Enumeration.

  1. Primeiro, adicione-os utilizando instruções de seu arquivo de definição de classe.
    using Windows.Devices.Enumeration;
    using Windows.Devices.Scanners;
  1. Em seguida, implemente um observador de dispositivo para iniciar a enumeração de scanners. Para obter mais informações, consulte Enumerar dispositivos.
    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. Crie um manipulador de eventos para quando um scanner for adicionado.
    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);
             }
       );
    }

Verificar

  1. Obter um objeto ImageScanner

Para cada tipo de enumeração ImageScannerScanSource, independentemente de ser Default, AutoConfigured, Flatbed ou Feeder, primeiro você deve criar um objeto ImageScanner chamando o método ImageScanner.FromIdAsync, da seguinte maneira.

   ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
  1. Apenas digitalizar

Para digitalizar com as configurações padrão, seu aplicativo conta com o namespace Windows.Devices.Scanners para selecionar um scanner e digitalizar dessa origem. Nenhuma configuração de digitalização é alterada. Os scanners possíveis são configurado automaticamente, plano ou alimentador. Esse tipo de digitalização é o mais provável que produza uma operação de digitalização bem-sucedida, mesmo se digitalizar da fonte errada, como de scanner plano em vez de alimentador.

Nota Se o usuário colocar o documento para verificar no alimentador, o verificador verificará a partir do flatbed. Se o usuário tentar digitalizar de um alimentador vazio, a tarefa de digitalização não produzirá qualquer arquivo digitalizado.  

    var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
        folder).AsTask(cancellationToken.Token, progress);
  1. Digitalizar de origem Configurada automaticamente, Plana ou de Alimentador

Seu aplicativo pode usar Digitalização configurada automaticamente do dispositivo, para digitalizar com as melhores configurações de digitalização. Com essa opção, o próprio dispositivo pode determinar as melhores configurações de digitalização, como modo de cor e resolução da digitalização, de acordo com o conteúdo que está sendo digitalizado. O dispositivo seleciona as configurações de digitalização no tempo de execução para cada nova tarefa de digitalização.

Nota Nem todos os scanners dão suporte a esse recurso, portanto, o aplicativo deve marcar se o verificador der suporte a esse recurso antes de usar essa configuração.

Nesse exemplo, o aplicativo primeiro verifica se o scanner é capaz de usar configuração automática e então digitaliza. Para especificar se em plano ou alimentador, simplesmente substitua AutoConfigured por Flatbed ou 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);
        ...
    }

Visualizar a digitalização

Você pode adicionar código para visualizar a digitalização antes de digitalizar para uma pasta, como essa. No exemplo abaixo, o aplicativo verifica se o scanner Flatbed oferece suporte para visualização, então visualiza a digitalização.

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

Cancelar a digitalização

Você pode permitir que os usuários cancelem a digitalização no meio da tarefa por meio da opção digitalizar, como essa.

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

Digitalização com progresso

  1. Crie um objeto System.Threading.CancellationTokenSource.
cancellationToken = new CancellationTokenSource();
  1. Configure o manipulador de eventos de progresso e obtenha o progresso da digitalização.
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
    var progress = new Progress<UInt32>(ScanProgress);

Digitalizando para a biblioteca de imagens

Os usuários podem digitalizar para qualquer pasta dinamicamente, usando a classe FolderPicker, mas você deve declarar o recurso Biblioteca de Imagens no manifesto para permitir que os usuários digitalizem para essa pasta. Para obter mais informações sobre as funcionalidades do aplicativo, consulte Declarações de funcionalidades do aplicativo.