Compartir a través de


Digitalizar desde tu aplicación

En este tema se describe cómo examinar el contenido de la aplicación mediante un origen de examen sin formato, alimentador o configurado automáticamente.

API importantes

Para examinar desde la aplicación, primero debes enumerar los escáneres disponibles declarando un nuevo objeto DeviceInformation y obteniendo el tipo DeviceClass. Solo se muestran los escáneres instalados localmente con controladores WIA y disponibles para la aplicación.

Una vez que la aplicación haya enumerado escáneres disponibles, puede usar las opciones de examen configuradas automáticamente en función del tipo de escáner, o simplemente escanear con el origen de análisis plano o alimentador disponible. Para usar los valores configurados automáticamente, el escáner debe estar habilitado para la configuración automática y no debe estar equipado con un escáner de alimentación y plano. Para obtener más información, consulta Examen configurado automáticamente.

Enumerar escáneres disponibles

Windows no detecta escáneres automáticamente. Debe realizar este paso para que la aplicación se comunique con el analizador. En este ejemplo, la enumeración de dispositivos del analizador se realiza mediante el espacio de nombres Windows.Devices.Enumeration.

  1. En primer lugar, agregue estas instrucciones using al archivo de definición de clase.
    using Windows.Devices.Enumeration;
    using Windows.Devices.Scanners;
  1. A continuación, implemente un monitor de dispositivo para iniciar la enumeración de escáneres. Para obtener más información, consulta 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. Cree un controlador de eventos para cuando se agregue un analizador.
    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);
             }
       );
    }

Digitalizar

  1. Obtener un objeto ImageScanner

Para cada tipo de enumeración ImageScannerScanSource, ya sea Default, AutoConfigured, Flatbed o Feeder, primero debe crear un objeto ImageScanner llamando al método ImageScanner.FromIdAsync, como este.

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

Para examinar con la configuración predeterminada, la aplicación se basa en el espacio de nombres Windows.Devices.Scanners para seleccionar un escáner y examinar desde ese origen. No se cambia ninguna configuración de examen. Los escáneres posibles son autoconfigurados, planos o alimentadores. Este tipo de examen probablemente producirá una operación de examen correcta, incluso si examina desde el origen incorrecto, como plano en lugar de alimentador.

Nota Si el usuario coloca el documento que se va a examinar en el alimentador, el escáner examinará desde el plano en su lugar. Si el usuario intenta examinar desde un alimentador vacío, el trabajo de examen no generará ningún archivo escaneado.  

    var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
        folder).AsTask(cancellationToken.Token, progress);
  1. Examen desde el origen autoconfigurado, plano o alimentador

La aplicación puede usar el examen autoconfigurado del dispositivo para examinar con la configuración de examen más óptima. Con esta opción, el propio dispositivo puede determinar la mejor configuración de examen, como el modo de color y la resolución del examen, en función del contenido que se está examinando. El dispositivo selecciona la configuración de examen en tiempo de ejecución para cada nuevo trabajo de examen.

Nota No todos los escáneres admiten esta característica, por lo que la aplicación debe comprobar si el analizador admite esta característica antes de usar esta configuración.

En este ejemplo, la aplicación comprueba primero si el analizador es capaz de configurar automáticamente y, a continuación, examina. Para especificar escáner plano o alimentador, simplemente reemplace AutoConfigured por 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);
        ...
    }

Vista previa del examen

Puede agregar código para obtener una vista previa del examen antes de examinar en una carpeta. En el ejemplo siguiente, la aplicación comprueba si el escáner flatbed admite la versión preliminar y, a continuación, muestra una vista previa del examen.

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

Cancelación del examen

Puede permitir que los usuarios cancele el trabajo de examen a mitad de un examen, como este.

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

Examen con progreso

  1. Cree un objeto System.Threading.CancellationTokenSource .
cancellationToken = new CancellationTokenSource();
  1. Configure el controlador de eventos de progreso y obtenga el progreso del examen.
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
    var progress = new Progress<UInt32>(ScanProgress);

Examen de la biblioteca de imágenes

Los usuarios pueden examinar en cualquier carpeta dinámicamente mediante la clase FolderPicker, pero debe declarar la funcionalidad Biblioteca de imágenes en el manifiesto para permitir que los usuarios examinen esa carpeta. Para obtener más información sobre las funcionalidades de la aplicación, consulta Declaraciones de funcionalidad de la aplicación.