Partager via


Prise en main d'un scanner de codes-barres avec appareil photo

Cette rubrique explique comment configurer un scanneur de codes-barres de caméra de base dans une application UWP.

Remarque

Le décodeur logiciel intégré à Windows 10/11 est fourni par Digimarc Corporation.

Les extraits de code suivants sont uniquement à des fins de démonstration. Pour obtenir un exemple de travail complet, consultez l’exemple de scanneur de codes-barres .

Étape 1 : Ajouter des déclarations de fonctionnalité au manifeste de votre application

  1. Dans Microsoft Visual Studio, dans Explorateur de solutions, ouvrez le concepteur du manifeste de l’application en double-cliquant sur l’élément package.appxmanifest.
  2. Sélectionnez l’onglet Fonctionnalités.
  3. Cochez les cases pour Webcam et PointOfService.

Remarque

La fonctionnalité webcam est requise pour que le décodeur logiciel reçoive des images de la caméra pour décoder le code-barres et fournir un aperçu dans votre application.

Étape 2 : Ajouter des directives using

using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;

Étape 3 : Définir votre sélecteur d’appareil

Utilisez l’une des méthodes BarcodeScanner.GetDeviceSelector pour obtenir un objet BarcodeScanner pour chaque scanneur de codes-barres connecté.

Option A : Rechercher tous les scanneurs de codes-barres

string selector = BarcodeScanner.GetDeviceSelector();

Option B : Rechercher tous les lecteurs de codes-barres en fonction du périmètre (par exemple, nous appliquons un filtre sur type de connexion local)

string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Étape 4 : Énumérer les scanneurs de codes-barres

Si vous ne vous attendez pas à ce que la liste des appareils change pendant la durée de vie de votre application, utilisez DeviceInformation.FindAllAsync pour obtenir un instantané unique. Toutefois, si la liste des scanneurs de codes-barres peut changer pendant la durée de vie de votre application, utilisez un DeviceWatcher à la place.

Important

L’utilisation de GetDefaultAsync pour énumérer pointOfService appareils peut entraîner un comportement incohérent, car il retourne uniquement le premier appareil trouvé dans la classe (qui peut passer de la session à la session).

Option A : Énumérer une vue instantanée de tous les scanners de codes-barres connectés en fonction du sélecteur créé à l’étape 3

Dans cet extrait de code, nous créons un objet DeviceInformationCollection et utilisons ****DeviceInformation.FindAllAsync pour le remplir.

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Conseil / Astuce

Consultez Énumérer un instantané des appareils pour plus d’informations sur l’utilisation de DeviceInformation.FindAllAsync.

Option B : Énumérer les scanneurs de codes-barres disponibles en fonction du sélecteur créé à l’étape 3 et observer les modifications apportées à cette collection

Dans cet extrait de code, nous créons un DeviceWatcher avec DeviceInformation.CreateWatcher .

DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();

Conseil / Astuce

Pour plus d’informations, consultez Énumérer et surveiller des appareils et DeviceWatcher.

Étape 5 : Identifier les scanneurs de codes-barres de caméra

Un scanneur de codes-barres de caméra se compose d’une caméra (attachée à un ordinateur) combinée à un décodeur logiciel, que Windows associe dynamiquement pour créer un scanneur de codes-barres entièrement fonctionnel pour les applications de plateforme Windows universelle (UWP).

BarcodeScanner.VideoDeviceID pouvez être utilisé pour différencier les scanneurs de codes-barres de caméra et les scanneurs de codes-barres physiques. Un VideoDeviceID non NULL indique que l’objet scanneur de codes-barres de votre collection d’appareils est un scanneur de codes-barres de caméra. Si vous avez plusieurs scanneurs de codes-barres de caméra, vous souhaiterez peut-être créer une collection distincte qui exclut les scanneurs de codes-barres physiques.

Les scanneurs de codes-barres de caméra utilisant le décodeur fourni avec Windows sont identifiés comme suit :

Microsoft BarcodeScanner (nom de votre appareil photo ici)

S’il y a plusieurs caméras et qu’elles sont intégrées au châssis de l’ordinateur, le nom peut différencier avant et caméras arrière.

Lorsque le DeviceWatcher démarre (voir Étape 4 : Énumérer les scanneurs de codes-barres), il énumère chaque appareil connecté. Dans l’extrait de code suivant, nous ajoutons chaque scanner disponible à une collection BarcodeScanner et lions la collection à un ListBox.

ObservableCollection<BarcodeScanner> barcodeScanners = 
  new ObservableCollection<BarcodeScanner>();

private async void Watcher_Added(DeviceWatcher sender, DeviceInformation args)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        barcodeScanners.Add(new BarcodeScanner(args.Name, args.Id));

        // Select the first scanner by default.
        if (barcodeScanners.Count == 1)
        {
            ScannerListBox.SelectedIndex = 0;
        }
    });
}

Lorsque l'index sélectionné de la ListBox change (le premier élément est sélectionné par défaut dans l'extrait précédent), nous interrogeons les informations sur l'appareil (la tâche SelectScannerAsync est implémentée à l'étape 6 : revendiquer le scanneur de codes-barres de la caméra).

private async void ScannerSelection_Changed(object sender, SelectionChangedEventArgs args)
{
    var selectedScannerInfo = (BarcodeScanner)args.AddedItems[0];
    var deviceId = selectedScannerInfo.DeviceId;

    await SelectScannerAsync(deviceId);
}

Étape 6 : Revendiquer le scanneur de codes-barres de la caméra

Appelez BarcodeScanner.ClaimScannerAsync pour obtenir l’utilisation exclusive du scanneur de codes-barres de la caméra.

private async Task SelectScannerAsync(string scannerDeviceId)
{
    selectedScanner = await BarcodeScanner.FromIdAsync(scannerDeviceId);

    if (selectedScanner != null)
    {
        claimedScanner = await selectedScanner.ClaimScannerAsync();
        if (claimedScanner != null)
        {
            await claimedScanner.EnableAsync();
        }
        else
        {
            rootPage.NotifyUser("Failed to claim the selected barcode scanner", NotifyType.ErrorMessage);
        }
    }
    else
    {
        rootPage.NotifyUser("Failed to create a barcode scanner object", NotifyType.ErrorMessage);
    }
}

Étape 7 : Aperçu fourni par le système

Un aperçu de la caméra est nécessaire pour aider l’utilisateur à viser la caméra à un code-barres. Windows fournit un aperçu de la caméra de base qui lance une boîte de dialogue pour contrôler le scanneur de codes-barres de la caméra.

Appelez ClaimedBarcodeScanner.ShowVideoPreview pour ouvrir la boîte de dialogue et ClaimedBarcodeScanner.HideVideoPreview la fermer.

Conseil / Astuce

Consultez Aperçu de l'hébergement pour héberger l'aperçu du lecteur de codes-barres de la caméra dans votre application.

Étape 8 : Lancer l’analyse

Vous pouvez lancer le processus d’analyse en appelant StartSoftwareTriggerAsync.

Selon la valeur de IsDisabledOnDataReceived, le scanneur peut lire un seul code-barres, puis s'arrêter ou scanner en continu jusqu’à ce que vous appeliez StopSoftwareTriggerAsync.

Définissez la valeur souhaitée de IsDisabledOnDataReceived pour contrôler le comportement du scanneur lorsqu’un code-barres est décodé.

Valeur Descriptif
Vrai Scannez un seul code-barres, puis arrêtez
Faux Analyser en continu les codes-barres sans arrêter

Voir aussi