Partager via


Numériser à partir de votre application

Cette rubrique explique comment analyser du contenu à partir de votre application à l’aide d’une source d’analyse à plat, d’un flux ou d’une source d’analyse configurée automatiquement.

API importantes

Important

Les API Windows.Devices.Scanners font partie de la famille d’appareils de bureau. Les applications peuvent utiliser ces API uniquement sur la version de bureau de Windows 10.

Pour analyser à partir de votre application, vous devez d’abord répertorier les scanneurs disponibles en déclarant un nouvel objet DeviceInformation et en obtenant le type DeviceClass. Seuls les scanneurs installés localement avec les pilotes WIA sont répertoriés et disponibles pour votre application.

Une fois que votre application a répertorié les scanneurs disponibles, elle peut utiliser les paramètres d’analyse configurés automatiquement en fonction du type de scanneur, ou simplement analyser à l’aide de la source d’analyse disponible à plat ou de flux. Pour utiliser les paramètres configurés automatiquement, le scanneur doit être activé pour la configuration automatique et ne doit pas être équipé à la fois d’un scanneur à plat et d’un scanneur d’alimentation. Pour plus d’informations, consultez Analyse configurée automatiquement.

Énumérer les scanneurs disponibles

Windows ne détecte pas automatiquement les scanneurs. Vous devez effectuer cette étape pour que votre application communique avec le scanneur. Dans cet exemple, l’énumération de l’appareil scanneur est effectuée à l’aide de l’espace de noms Windows.Devices.Enumeration .

  1. Tout d’abord, ajoutez ces instructions using à votre fichier de définition de classe.
    using Windows.Devices.Enumeration;
    using Windows.Devices.Scanners;
  1. Ensuite, implémentez un observateur d’appareil pour démarrer l’énumération des scanneurs. Pour plus d’informations, consultez Énumérer les appareils.
    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. Créez un gestionnaire d’événements pour lequel un scanneur est ajouté.
    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);
             }
       );
    }

Numériser

  1. Obtenir un objet ImageScanner

Pour chaque type d’énumération ImageScannerScanSource, qu’il s’agisse de Default, AutoConfigured, Flatbed ou Feeder, vous devez d’abord créer un objet ImageScanner en appelant la méthode ImageScanner.FromIdAsync, comme ceci.

   ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
  1. Analyser simplement

Pour analyser les paramètres par défaut, votre application s’appuie sur l’espace de noms Windows.Devices.Scanners pour sélectionner un scanneur et analyser à partir de cette source. Aucun paramètre d’analyse n’est modifié. Les scanneurs possibles sont configurés automatiquement, à plat ou à flux. Ce type d’analyse produit probablement une opération d’analyse réussie, même si elle analyse à partir de la source incorrecte, comme à plat au lieu de l’alimenteur.

Notez que si l’utilisateur place le document à analyser dans le chargeur, le scanneur analyse à partir du lit plat à la place. Si l’utilisateur tente d’analyser à partir d’un feeder vide, le travail d’analyse ne produit aucun fichier analysé.  

    var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
        folder).AsTask(cancellationToken.Token, progress);
  1. Analyser à partir d’une source configurée automatiquement, à plat ou à flux

Votre application peut utiliser l’analyse configurée automatiquement de l’appareil pour analyser les paramètres d’analyse les plus optimaux. Avec cette option, l’appareil lui-même peut déterminer les meilleurs paramètres d’analyse, tels que le mode de couleur et la résolution d’analyse, en fonction du contenu analysé. L’appareil sélectionne les paramètres d’analyse au moment de l’exécution pour chaque nouvelle tâche d’analyse.

Notez que tous les scanneurs ne prennent pas en charge cette fonctionnalité. L’application doit donc vérifier si le scanneur prend en charge cette fonctionnalité avant d’utiliser ce paramètre.

Dans cet exemple, l’application vérifie d’abord si le scanneur est capable de configurer automatiquement, puis analyse. Pour spécifier un scanneur à plat ou un chargeur, remplacez simplement AutoConfigured par Plat 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);
        ...
    }

Afficher un aperçu de l’analyse

Vous pouvez ajouter du code pour afficher un aperçu de l’analyse avant l’analyse dans un dossier. Dans l’exemple ci-dessous, l’application vérifie si le scanneur à plat prend en charge la préversion, puis affiche un aperçu de l’analyse.

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

Annuler l’analyse

Vous pouvez permettre aux utilisateurs d’annuler le travail d’analyse au milieu d’une analyse, comme celle-ci.

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

Analyser avec progression

  1. Créez un objet System.Threading.CancellationTokenSource .
cancellationToken = new CancellationTokenSource();
  1. Configurez le gestionnaire d’événements de progression et obtenez la progression de l’analyse.
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
    var progress = new Progress<UInt32>(ScanProgress);

Analyse de la bibliothèque d’images

Les utilisateurs peuvent effectuer une analyse dynamique sur n’importe quel dossier à l’aide de la classe FolderPicker, mais vous devez déclarer la fonctionnalité Bibliothèque d’images dans le manifeste pour permettre aux utilisateurs d’analyser ce dossier. Pour plus d’informations sur les fonctionnalités d’application, consultez les déclarations de fonctionnalités d’application.