Passer au contenu du pied de page
UTILISATION DE IRONBARCODE

Comment créer un lecteur de codes-barres .NET MAUI en C# ?

IronBarcode vous permet de scanner les codes-barres directement à partir de fichiers image dans une application .NET MAUI ; aucun flux de caméra, aucune configuration de pilote, aucune boucle d'autorisation spécifique à la plateforme n'est requise.

Vous pouvez scanner les codes-barres des fichiers JPEG, PNG, GIF, TIFF et BMP en un seul appel de méthode. Le même code cible Windows, Android et iOS sans modification. Commencez par un essai gratuit pour suivre les exemples de code ci-dessous.

Comment créer un projet .NET MAUI pour la lecture de codes-barres ?

Configurer un projet .NET MAUI dans Visual Studio est simple. Lancez Visual Studio 2022 ou une version ultérieure, sélectionnez Créer un nouveau projet , choisissez le modèle d'application .NET MAUI , saisissez le nom de votre projet et sélectionnez vos plateformes cibles. Ce tutoriel se concentre sur le déploiement sous Windows, bien que le même projet fonctionne également sous Android et iOS. .NET MAUI est le framework multiplateforme de Microsoft permettant de créer des applications mobiles et de bureau natives avec C# et XAML à partir d'une seule base de code partagée.

Contrairement aux solutions basées sur la caméra telles que ZXing .NET.MAUI qui nécessitent une configuration de contrôle CameraView et un enregistrement MauiProgram.cs, IronBarcode ne nécessite aucune configuration spéciale. Votre MauiProgram.cs reste dans l'état du modèle par défaut. Cela permet de préserver votre code de démarrage des enregistrements de gestionnaires tiers et de réduire la surface d'exposition aux erreurs d'initialisation au moment du lancement.

Pour installer IronBarcode, exécutez cette commande dans la console du gestionnaire de packages :

Install-Package BarCode
Install-Package BarCode
SHELL

Ce pack unique vous offre la lecture de codes-barres, la reconnaissance de codes QR, la détection de plusieurs codes-barres et la génération de codes-barres. Aucune dépendance supplémentaire n'est nécessaire.

Pour activer IronBarcode en production, définissez votre clé de licence dans App.xaml.cs ou MauiProgram.cs :

IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
$vbLabelText   $csharpLabel

Vous pouvez obtenir une clé sur la page de licences IronBarcode ou commencer par une licence d'essai gratuite .

En quoi les autorisations diffèrent-elles pour la numérisation d'images ?

Les lecteurs de codes-barres traditionnels à caméra nécessitent des autorisations explicites dans les manifestes de la plateforme. Sur Android, vous ajoutez à AndroidManifest.xml :

  • <uses-permission android:name="android.permission.CAMERA" />
  • <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Sur iOS, vous déclarez NSCameraUsageDescription dans Info.plist. La gestion des autorisations refusées lors de l'exécution ajoute des chemins d'erreur faciles à manquer.

Comme IronBarcode lit à partir d'un flux de fichiers plutôt que d'un aperçu de la caméra, vous n'avez besoin que d'un accès au système de fichiers. Sous Windows, cette autorisation est accordée automatiquement. Sur Android et iOS, FilePicker gère le consentement de l'utilisateur lorsque celui-ci sélectionne une image -- aucune demande d'autorisation manuelle n'est requise.

Quelle interface XAML convient le mieux à un lecteur de codes-barres MAUI ?

Une interface minimale – un bouton de sélection d'image, une zone d'affichage d'image et une étiquette de résultats – couvre la plupart des scénarios de lecture de codes-barres. Le code XAML suivant crée cette mise en page pour une application .NET MAUI ContentPage :

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="BarcodeScanner.MainPage">
    <ScrollView>
        <VerticalStackLayout Spacing="20" Padding="30">
            <Label Text="MAUI Barcode Scanner"
                   FontSize="24"
                   HorizontalOptions="Center" />
            <Button x:Name="SelectImageBtn"
                    Text="Select Image File"
                    Clicked="OnSelectImage" />
            <Image x:Name="SelectedImageDisplay"
                   HeightRequest="250" />
            <Label x:Name="ResultsLabel"
                   Text="Barcode results will appear here" />
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="BarcodeScanner.MainPage">
    <ScrollView>
        <VerticalStackLayout Spacing="20" Padding="30">
            <Label Text="MAUI Barcode Scanner"
                   FontSize="24"
                   HorizontalOptions="Center" />
            <Button x:Name="SelectImageBtn"
                    Text="Select Image File"
                    Clicked="OnSelectImage" />
            <Image x:Name="SelectedImageDisplay"
                   HeightRequest="250" />
            <Label x:Name="ResultsLabel"
                   Text="Barcode results will appear here" />
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
XML

La mise en page comprend un bouton pour déclencher le sélecteur de fichiers, une zone d'affichage pour l'image choisie et une étiquette pour les valeurs du code-barres décodées. Il s'affiche correctement sur toutes les plateformes cibles .NET MAUI sans ajustements spécifiques à la plateforme.

Pour les applications de production, envisagez de remplacer ResultsLabel par un CollectionView pour afficher plusieurs résultats de code-barres dans une liste défilable, en particulier lors de la numérisation de documents contenant plus d'un code-barres.

Comment scanner les codes-barres à partir de fichiers image dans .NET MAUI?

Le code-behind dans MainPage.xaml.cs gère la sélection de l'image et la lecture du code-barres. BarcodeReader.Read accepte un chemin de fichier et renvoie une collection BarcodeResults. Chaque élément de la collection expose le code-barres Value, BarcodeType, et les coordonnées de position.

Voici l'implémentation complète :

using IronBarCode;
namespace BarcodeScanner;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnSelectImage(object sender, EventArgs e)
    {
        try
        {
            // Open the system file picker filtered to image types
            var result = await FilePicker.PickAsync(new PickOptions
            {
                FileTypes = FilePickerFileType.Images,
                PickerTitle = "Select a barcode image"
            });

            if (result != null)
            {
                // Display the selected image in the UI
                var stream = await result.OpenReadAsync();
                SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);

                // Decode all barcodes found in the image
                var barcodes = BarcodeReader.Read(result.FullPath);

                if (barcodes.Count > 0)
                {
                    // Build a display string listing each barcode type and value
                    string output = string.Join("\n",
                        barcodes.Select(b => $"{b.BarcodeType}: {b.Value}"));
                    ResultsLabel.Text = output;
                }
                else
                {
                    ResultsLabel.Text = "No barcodes detected in image";
                }
            }
        }
        catch (Exception ex)
        {
            ResultsLabel.Text = $"Error: {ex.Message}";
        }
    }
}
using IronBarCode;
namespace BarcodeScanner;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnSelectImage(object sender, EventArgs e)
    {
        try
        {
            // Open the system file picker filtered to image types
            var result = await FilePicker.PickAsync(new PickOptions
            {
                FileTypes = FilePickerFileType.Images,
                PickerTitle = "Select a barcode image"
            });

            if (result != null)
            {
                // Display the selected image in the UI
                var stream = await result.OpenReadAsync();
                SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);

                // Decode all barcodes found in the image
                var barcodes = BarcodeReader.Read(result.FullPath);

                if (barcodes.Count > 0)
                {
                    // Build a display string listing each barcode type and value
                    string output = string.Join("\n",
                        barcodes.Select(b => $"{b.BarcodeType}: {b.Value}"));
                    ResultsLabel.Text = output;
                }
                else
                {
                    ResultsLabel.Text = "No barcodes detected in image";
                }
            }
        }
        catch (Exception ex)
        {
            ResultsLabel.Text = $"Error: {ex.Message}";
        }
    }
}
$vbLabelText   $csharpLabel

BarcodeReader.Read traite le fichier au chemin indiqué, détecte automatiquement toutes les symbologies de codes-barres présentes et renvoie les résultats immédiatement. Cette méthode prend en charge tous les principaux formats de codes-barres 1D et 2D, notamment Code 128, Code 39, QR Code, Data Matrix, PDF417 et EAN-13.

 .NET MAUI : Lecture de codes-barres dans les applications Windows grâce à une puissante bibliothèque de lecture de codes-barres : Image 1 - Sortie du code-barres scanné

L'appel FilePicker.PickAsync limite le sélecteur aux types d'images, afin que les utilisateurs ne puissent pas sélectionner accidentellement des fichiers non image. Si result est null, l'utilisateur a annulé -- le garde if (result != null) gère cela silencieusement.

Comment afficher les résultats d'analyse dans une boîte de dialogue ?

Pour les messages de confirmation brefs, DisplayAlert fournit une boîte de dialogue modale sans nécessiter d'éléments d'interface utilisateur supplémentaires :

private async void ShowScanSummary(BarcodeResults barcodes)
{
    if (barcodes.Count > 0)
    {
        // Inform the user how many barcodes were detected
        string message = $"Found {barcodes.Count} barcode(s) in the image.";
        await DisplayAlert("Scan Complete", message, "OK");
    }
    else
    {
        await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
    }
}
private async void ShowScanSummary(BarcodeResults barcodes)
{
    if (barcodes.Count > 0)
    {
        // Inform the user how many barcodes were detected
        string message = $"Found {barcodes.Count} barcode(s) in the image.";
        await DisplayAlert("Scan Complete", message, "OK");
    }
    else
    {
        await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
    }
}
$vbLabelText   $csharpLabel

Ce modèle fonctionne bien pour les flux de confirmation simples. Pour les applications qui doivent agir sur les valeurs décodées -- par exemple, rechercher un produit par son code-barres dans un système de gestion d'inventaire de codes-barres -- transmettez la collection barcodes à votre couche de logique métier directement depuis le gestionnaire OnSelectImage.

Comment scanner plusieurs codes-barres et optimiser la vitesse de détection ?

Lorsqu'une image contient plusieurs codes-barres, IronBarcode les détecte tous par défaut. Pour de meilleures performances lorsque vous connaissez les formats attendus, configurez BarcodeReaderOptions avant d'appeler BarcodeReader.Read :

using IronBarCode;

// Target only QR codes and Code 128 for faster detection
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes     = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed                  = ReadingSpeed.Balanced
};

var barcodes = BarcodeReader.Read(imagePath, options);

foreach (var barcode in barcodes)
{
    Console.WriteLine($"Type: {barcode.BarcodeType} | Value: {barcode.Value}");
}
using IronBarCode;

// Target only QR codes and Code 128 for faster detection
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes     = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed                  = ReadingSpeed.Balanced
};

var barcodes = BarcodeReader.Read(imagePath, options);

foreach (var barcode in barcodes)
{
    Console.WriteLine($"Type: {barcode.BarcodeType} | Value: {barcode.Value}");
}
$vbLabelText   $csharpLabel

 .NET MAUI : Lecture de codes-barres dans les applications Windows avec une puissante bibliothèque de lecture de codes-barres : Image 2 - Résultat de la lecture de plusieurs codes-barres

La propriété ExpectBarcodeTypes restreint le moteur de détection aux symbologies spécifiées. Le réglage Speed à ReadingSpeed.Faster convient aux images à contraste élevé et non déformées. ReadingSpeed.Detailed applique des passes de correction d'image supplémentaires et gère la rotation, l'inclinaison et les entrées à basse résolution au prix d'un temps de traitement supplémentaire.

ExpectMultipleBarcodes = true indique au lecteur de continuer la numérisation après le premier match plutôt que de revenir prématurément. Dans les scénarios à code-barres unique, le fait d'omettre cette option permet de gagner quelques millisecondes sur chaque scan.

Cette configuration rend le scanner pratique pour une gamme d'applications : une application de vente au détail lisant les codes-barres des produits, un outil d'entrepôt traitant les étiquettes de codes-barres imprimées sur les photos d'expédition ou un flux de travail documentaire extrayant les codes QR des factures téléchargées.

Comment gérez-vous les images difficiles ou de faible qualité ?

Les images de production sont rarement impeccables. Les photos d'entrepôt prises sous un éclairage cru, les captures d'écran de clients de messagerie et les documents numérisés introduisent tous du bruit, des artefacts de compression et des distorsions géométriques. IronBarcode expose ImageFilterCollection pour prétraiter les images avant le décodage :

using IronBarCode;
using IronSoftware.Drawing;

// Apply corrections for a low-quality warehouse photo
var options = new BarcodeReaderOptions
{
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f),
        new DenoiseFilter()
    },
    Speed = ReadingSpeed.Detailed
};

var barcodes = BarcodeReader.Read(imagePath, options);
using IronBarCode;
using IronSoftware.Drawing;

// Apply corrections for a low-quality warehouse photo
var options = new BarcodeReaderOptions
{
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f),
        new DenoiseFilter()
    },
    Speed = ReadingSpeed.Detailed
};

var barcodes = BarcodeReader.Read(imagePath, options);
$vbLabelText   $csharpLabel

SharpenFilter récupère la définition des contours à partir de captures compressées ou floues. ContrastFilter est utile lorsque l'éclairage est inégal. DenoiseFilter réduit le bruit de granularité des numérisations à basse résolution. La combinaison de ces filtres avec ReadingSpeed.Detailed maximise les taux de lecture sur les documents difficiles.

Pour les applications .NET MAUI qui acceptent les images téléchargées par l'utilisateur à partir de diverses sources, l'application d'un ensemble de filtres conservateurs par défaut et le passage à une correction plus agressive lors d'une deuxième tentative améliorent l'expérience utilisateur sans ajouter de latence visible dans la plupart des cas. Vous pouvez également transmettre un Uri ou byte[] directement à BarcodeReader.Read, ce qui est utile lorsque l'image arrive d'une réponse réseau plutôt que du système de fichiers. Consultez les guides pratiques IronBarcode pour obtenir d'autres exemples de sources d'entrée.

Pourquoi la numérisation par image convient-elle aux applications .NET MAUI ?

La numérisation en direct de la caméra via un contrôle CameraView nécessite des autorisations spécifiques à la plateforme, une gestion du cycle de vie pour l'aperçu de la caméra et la gestion des événements de mise au point. Sur iOS, cela signifie également configurer AVCaptureSession; sur Android, CameraX. Chaque plateforme présente ses propres modes de défaillance.

La numérisation par imagerie élimine toute cette catégorie de préoccupation. La référence de l'API IronBarcode montre que BarcodeReader.Read accepte un chemin de fichier, un Stream, un Bitmap ou un byte[] -- toute représentation que votre application MAUI peut produire. Cela signifie que la même logique de numérisation fonctionne que l'image provienne de FilePicker, d'un téléchargement réseau, d'une page PDF rendue en bitmap ou d'une pièce jointe d'e-mail.

La consommation de la batterie est réduite car le matériel de l'appareil photo reste éteint. Aucun scintillement de l'interface utilisateur n'est perceptible lors de la prévisualisation en direct, et il n'est pas nécessaire de gérer les événements du cycle de vie de la caméra lors de la suspension et de la reprise de l'application. Sur les tablettes et les ordinateurs de bureau, où l'utilisation d'un viseur de caméra en direct est rarement pertinente, le décodage par image est le comportement par défaut, et non un compromis. Les utilisateurs peuvent ouvrir des fichiers depuis le stockage cloud, des dossiers locaux ou la pellicule avec la même commande FilePicker, quel que soit l'appareil.

Pour les flux de travail où les utilisateurs photographient des étiquettes de code-barres et les téléchargent — courants dans les applications Web de scanner de code-barres ASP.NET — le même appel BarcodeReader.Read fonctionne à la fois sur le client mobile et sur le serveur, supprimant ainsi la nécessité de maintenir deux implémentations de numérisation.

Comment IronBarcode se compare-t-il à ZXing .NET.MAUI ?

ZXing .NET.MAUI cible la numérisation en direct par caméra et fonctionne bien lorsque le retour d'information en temps réel dans le viseur est une exigence du produit. Cela nécessite l'intégration CameraView, l'enregistrement du gestionnaire de plateforme et les demandes d'autorisation d'exécution.

IronBarcode cible le décodage basé sur les fichiers et sur les flux, ce qui couvre la majorité des flux de travail documentaires Enterprise . Il prend en charge une gamme plus étendue de symbologies, notamment PDF417 , Data Matrix et Code 128 , et fournit un prétraitement de filtre d'image que ZXing n'expose pas. Pour les applications où les utilisateurs capturent ou téléchargent des images plutôt que de scanner des articles en direct, IronBarcode est la solution la plus adaptée.

Si votre application nécessite une numérisation en direct par caméra en plus du décodage basé sur les fichiers, vous pouvez combiner les deux bibliothèques : ZXing .NET.MAUI pour le flux de travail du viseur et IronBarcode pour le traitement par lots des fichiers.

Quelles sont vos prochaines étapes ?

La création d'un lecteur de codes-barres .NET MAUI avec IronBarcode nécessite moins de 30 lignes de code C#. L'approche par fichier image permet de conserver votre code source MAUI exempt de logique d'autorisation de caméra et d'initialisation spécifique à la plateforme, et le même appel de numérisation s'exécute de manière identique sous Windows, Android et iOS.

La documentation de l'API IronBarcode couvre des fonctionnalités supplémentaires : lecture des codes-barres à partir de documents PDF, traitement par lots de plusieurs images, écriture de filtres d'image personnalisés et génération de codes-barres en même temps que leur lecture. La présentation des fonctionnalités répertorie toutes les symbologies et tous les formats pris en charge.

Démarrez un essai gratuit pour tester IronBarcode dans votre projet, ou achetez une licence lorsque vous serez prêt pour le déploiement en production.

Commencez avec IronBarcode maintenant.
green arrow pointer

Questions Fréquemment Posées

Comment créer un lecteur de codes-barres en .NET MAUI sans caméra ?

Installez IronBarcode via NuGet (`Install-Package BarCode`), puis appelez `BarcodeReader.Read(filePath)` avec un chemin obtenu via `FilePicker.PickAsync`. Aucune autorisation d'accès à la caméra ni configuration de `CameraView` n'est requise.

IronBarcode peut-il scanner les codes-barres sur Android et iOS avec .NET MAUI?

Oui. Le même appel `BarcodeReader.Read` s'exécute sur Windows, Android et iOS sans aucune modification du code ou du manifeste spécifique à la plateforme.

Quels sont les formats d'image pris en charge par IronBarcode pour la lecture des codes-barres ?

IronBarcode lit les codes-barres à partir de fichiers JPEG, PNG, GIF, TIFF et BMP. Il accepte également les entrées de type `Stream`, `Bitmap` et `byte[]`, ce qui permet de traiter les images provenant de réponses réseau sans les enregistrer au préalable sur le disque.

Comment scanner plusieurs codes-barres à partir d'une seule image dans .NET MAUI?

Définissez `ExpectMultipleBarcodes = true` dans `BarcodeReaderOptions` et transmettez les options à `BarcodeReader.Read`. Le lecteur renvoie tous les codes-barres détectés dans une seule collection `BarcodeResults`.

Quelle est la différence entre IronBarcode et ZXing .NET.MAUI ?

ZXing .NET.MAUI permet la numérisation en direct via une caméra grâce à un contrôle `CameraView`. IronBarcode prend en charge le décodage de fichiers et de flux, davantage de symbologies (dont PDF417 et Data Matrix) et propose un prétraitement par filtre d'image pour les entrées de faible qualité.

Comment améliorer la détection des codes-barres sur des images floues ou de mauvaise qualité ?

Ajoutez une `ImageFilterCollection` à `BarcodeReaderOptions` avec `SharpenFilter`, `ContrastFilter` et `DenoiseFilter`, puis définissez `Speed ​​= ReadingSpeed.Detailed`. Cela applique des corrections d'image avant le décodage.

Quels formats de codes-barres IronBarcode prend-il en charge dans .NET MAUI?

IronBarcode prend en charge toutes les principales symbologies 1D et 2D : Code 128, Code 39, QR Code, Data Matrix, PDF417, EAN-13, EAN-8, UPC-A, UPC-E, Aztec, et bien d’autres. La liste complète est disponible sur la page des fonctionnalités IronBarcode .

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi