Bien démarrer avec un scanneur de codes-barres appareil photo
Cette rubrique explique comment configurer un scanneur de codes-barres de caméra de base dans une application UWP.
Note
Le décodeur logiciel intégré à Windows 10/11 est fourni par Digimarc Corporation.
Les extraits de code suivants sont à des fins de démonstration uniquement. Pour obtenir un exemple de travail complet, consultez l’exemple de scanneur de codes-barres .
Étape 1 : Ajouter des déclarations de capacité à votre manifeste d’application
- 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.
- Sélectionnez l’onglet Fonctionnalités.
- Cochez les cases Webcam et PointOfService.
Note
La fonctionnalité Webcam est requise pour que le décodeur logiciel reçoive des images de l’appareil photo 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 scanneurs de codes-barres en fonction de l’étendue (pour cet exemple, nous filtrons sur le 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é ponctuelle. Toutefois, si la liste des scanneurs de codes-barres peut changer pendant la durée de vie de votre application, utilisez plutôt un DeviceWatcher .
Important
L’utilisation de GetDefaultAsync pour énumérer les appareils PointOfService peut entraîner un comportement incohérent, car elle retourne uniquement le premier appareil trouvé dans la classe (qui peut passer d’une session à une session).
Option A : Énumérer un instantané de tous les scanneurs 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);
Astuce
Consultez Énumérer un instantané d’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 regarder les modifications apportées à cette collection
Dans cet extrait de code, nous créons un DeviceWatcher à l’aide de DeviceInformation.CreateWatcher.
DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();
Astuce
Pour plus d’informations, consultez Énumérer et regarder des appareils et DeviceWatcher.
Étape 5 : Identifier les scanneurs de codes-barres de caméra
Un scanneur de codes-barres à caméra se compose d’une caméra (attachée à un ordinateur) associée à un décodeur logiciel, que Windows associe dynamiquement pour créer un scanneur de codes-barres entièrement fonctionnel pour les applications 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 faire la distinction entre caméras avant et arrière.
Lorsque 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 scanneur disponible à une collection BarcodeScanner et liez la collection à un Objet 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’élément SelectedIndex du ListBox change (le premier élément est sélectionné par défaut dans l’extrait de code-barres précédent), nous interrogeons les informations sur l’appareil (la tâche SelectScannerAsync
est implémentée à l’étape 6 : Revendication du scanneur de codes-barres de l’appareil photo).
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 : préversion fournie par le système
Une préversion de la caméra est nécessaire pour aider l’utilisateur à orienter la caméra vers un code-barres. Windows fournit une préversion de base de l’appareil photo qui lance une boîte de dialogue pour contrôler le scanneur de codes-barres de l’appareil photo.
Appelez ClaimedBarcodeScanner.ShowVideoPreview pour ouvrir la boîte de dialogue et ClaimedBarcodeScanner.HideVideoPreview pour le fermer.
Astuce
Consultez Hébergement en préversion pour héberger la préversion du scanneur de codes-barres de l’appareil photo 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 ne peut analyser qu’un seul code-barres, puis arrêter ou analyser 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 | Description |
---|---|
True | Scannez un seul code-barres, puis arrêtez |
False | Scanner en continu les codes-barres sans s’arrêter |