Comment lire des codes-barres à partir d'objets dessin système

Comment lire des BarCodes à partir de System.Drawing en C#

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronBarcode permet de lire des codes-barres à partir d'objets System.Drawing sur tous les systèmes d'exploitation en les convertissant automatiquement en AnyBitmap via IronDrawing, ce qui résout la limitation de Microsoft à Windows uniquement pour la prise en charge de System.Drawing.

Introduction

<TODO : Ajouter une image ici -->

les objets System.Drawing sont largement utilisés dans .NET pour les tâches de traitement d'images. Cependant, Microsoft a discontinué la prise en charge de System.Drawing sur MacOS et Linux, prenant désormais exclusivement en charge Windows. Ce changement a créé des problèmes pour les développeurs qui utilisent IronBarcode sur des systèmes d'exploitation non Windows, car le travail avec des codes-barres implique généralement des graphiques, des images et des fonts.

Pour résoudre ce problème, nous avons introduit IronDrawing. Cette bibliothèque gratuite et open-source, créée par IronSoftware, simplifie la prise en charge multiplateforme et offre une expérience transparente. Lorsque vous installez IronBarcode à partir de NuGet, IronDrawing est automatiquement inclus dans votre projet.

Pour les développeurs qui découvrent la lecture de codes-barres, consultez notre Tutoriel de lecture de codes-barres complet couvrant les concepts fondamentaux et les schémas d'utilisation de base. Si vous travaillez avec divers formats d'image, notre guide sur la lecture de codes-barres à partir d'images fournit un contexte et des exemples supplémentaires.

Démarrage rapide : lire un code-barres à l'aide de AnyBitmap en une seule ligne facile

Cet extrait montre comment IronBarcode lit les codes-barres en créant un System.Drawing.Bitmap et en laissant IronDrawing le mouler implicitement en AnyBitmap. Avec une seule ligne, les développeurs de n'importe quel système d'exploitation obtiennent des résultats rapides.

Nuget IconCommencez dès maintenant à créer des PDF avec NuGet :

  1. Installez IronBarcode avec le gestionnaire de packages NuGet

    PM > Install-Package BarCode

  2. Copiez et exécutez cet extrait de code.

    var results = IronBarCode.BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronBarcode dans votre projet dès aujourd'hui grâce à un essai gratuit.
    arrow pointer

Comment faire passer des objets System.Drawing à AnyBitmap ?

<TODO : Ajouter une image ici -->

La lecture des codes-barres à partir de System.Drawing nécessite le moulage de l'objet en AnyBitmap. IronDrawing a été conçu pour être facile à utiliser et prend en charge le moulage implicite pour les objets image de System.Drawing en objets image IronSoftware.Drawing appelés AnyBitmap.

Outre les objets System.Drawing, nous prenons en charge le moulage à partir d'autres types :

  • System.Drawing.Bitmap
  • System.Drawing.Image
  • SkiaSharp.SKBitmap
  • SkiaSharp.SKImage
  • SixLabors.ImageSharp

Voir cet exemple de code pour le moulage des objets ci-dessus. Vous trouverez ci-dessous une démonstration du moulage d'images de codes-barres à partir d'objets System.Drawing dans IronSoftware.Drawing.AnyBitmap :

Quels types de System.Drawing peuvent être coulés ?

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-system-drawing-cast-to-anybitmap.cs
using IronSoftware.Drawing;
using System.Collections.Generic;

List<AnyBitmap> barcodes = new List<AnyBitmap>();

// Instantiate System.Drawing.Bitmap
System.Drawing.Bitmap bitmapFromBitmap = new System.Drawing.Bitmap("test1.jpg");

// Cast from System.Drawing.Bitmap to AnyBitmap
AnyBitmap barcode1 = bitmapFromBitmap;

barcodes.Add(barcode1);

// Instantiate System.Drawing.Bitmap
System.Drawing.Image bitmapFromFile = System.Drawing.Image.FromFile("test2.png");

// Cast from System.Drawing.Image to AnyBitmap
AnyBitmap barcode2 = bitmapFromFile;

barcodes.Add(barcode2);
$vbLabelText   $csharpLabel

Ce code démontre une intégration transparente entre les objets System.Drawing et IronBarcode à travers IronDrawing. Cette compatibilité s'étend à divers formats de codes-barres, détaillés dans notre guide des formats de codes-barres pris en charge, notamment les codes QR, le Code 128, le Code 39 et bien d'autres.

Pourquoi la fonte implicite fonctionne-t-elle ?

Dans le code ci-dessus, nous avons chargé deux images de codes-barres en tant que System.Drawing.Bitmap et System.Drawing.Image. Nous les avons ensuite implicitement coulés dans AnyBitmap en les assignant à des objets AnyBitmap, puis nous avons ajouté ces objets à une liste AnyBitmap.

Le mécanisme de casting implicite d'IronDrawing utilise la surcharge d'opérateur, fournissant une conversion transparente entre les types System.Drawing et AnyBitmap. Ce modèle de conception permet aux développeurs de conserver le code existant tout en bénéficiant d'une compatibilité multiplateforme. La conversion préserve toutes les propriétés de l'image, y compris la résolution, la profondeur des couleurs et les données relatives aux pixels, afin d'éviter toute perte de qualité.

Quand dois-je utiliser le moulage explicite ou implicite ?

Bien que le moulage implicite soit pratique, le moulage explicite peut être préféré dans certains scénarios :

// Implicit casting - clean and simple for straightforward conversions
System.Drawing.Bitmap systemBitmap = new System.Drawing.Bitmap("barcode.png");
AnyBitmap anyBitmap = systemBitmap; // Implicit cast

// Explicit casting - useful when type clarity is important
System.Drawing.Image systemImage = System.Drawing.Image.FromFile("qrcode.jpg");
AnyBitmap explicitBitmap = (AnyBitmap)systemImage; // Explicit cast

// When working with nullable types or conditional logic
System.Drawing.Bitmap? nullableBitmap = GetBitmapFromSource();
if (nullableBitmap != null)
{
    AnyBitmap result = (AnyBitmap)nullableBitmap; // Explicit cast for clarity
    // Process the barcode
}
// Implicit casting - clean and simple for straightforward conversions
System.Drawing.Bitmap systemBitmap = new System.Drawing.Bitmap("barcode.png");
AnyBitmap anyBitmap = systemBitmap; // Implicit cast

// Explicit casting - useful when type clarity is important
System.Drawing.Image systemImage = System.Drawing.Image.FromFile("qrcode.jpg");
AnyBitmap explicitBitmap = (AnyBitmap)systemImage; // Explicit cast

// When working with nullable types or conditional logic
System.Drawing.Bitmap? nullableBitmap = GetBitmapFromSource();
if (nullableBitmap != null)
{
    AnyBitmap result = (AnyBitmap)nullableBitmap; // Explicit cast for clarity
    // Process the barcode
}
$vbLabelText   $csharpLabel

Quelles sont les erreurs de moulage les plus courantes ?

Lors de la conversion de System.Drawing en AnyBitmap, les développeurs peuvent rencontrer :

  1. Exceptions de référence nulle : Vérifiez que votre objet System.Drawing n'est pas nul avant de le lancer
  2. Exceptions de formats non pris en charge : certains formats d'images exotiques nécessitent une conversion préalable
  3. Questions de mémoire : Les images de grande taille doivent être éliminées de manière appropriée

Pour le dépannage des problèmes de coulage, notre guide de dépannage fournit des solutions aux problèmes courants lors de la reconnaissance des codes-barres.

Comment lire des BarCodes à partir d'objets AnyBitmap?

<TODO : Ajouter une image ici -->

IronBarcode accepte les objets IronSoftware.Drawing.AnyBitmap dans toutes les méthodes sans configuration supplémentaire. Cela simplifie le développement lors de l'utilisation d'objets System.Drawing sur des systèmes d'exploitation non Windows. Le code suivant illustre cela :

Quelles sont les méthodes qui acceptent les paramètres AnyBitmap ?

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-system-drawing-read-anybitmap.cs
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;

List<AnyBitmap> barcodes = new List<AnyBitmap>();

System.Drawing.Bitmap bitmapFromBitmap = new System.Drawing.Bitmap("test1.jpg");
AnyBitmap barcode1 = bitmapFromBitmap;
barcodes.Add(barcode1);

System.Drawing.Image bitmapFromFile = System.Drawing.Image.FromFile("test2.png");
AnyBitmap barcode2 = bitmapFromFile;
barcodes.Add(barcode2);

foreach (var barcode in barcodes)
{
    // Read the barcode
    var results = BarcodeReader.Read(barcode);
    foreach (var result in results)
    {
        // Output the detected barcode value
        Console.WriteLine(result.Value);
    }
}
$vbLabelText   $csharpLabel

Au-delà de la méthode de base Read, IronBarcode fournit plusieurs méthodes acceptant des paramètres AnyBitmap. Pour les scénarios avancés, consultez notre guide sur la lecture de plusieurs codes-barres démontrant le traitement efficace de plusieurs codes-barres dans une seule image :

// Advanced barcode reading with options
var readerOptions = new BarcodeReaderOptions
{
    // Specify barcode types to search for
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Enable machine learning for better accuracy
    UseML = true,
    // Set confidence threshold
    Confidence = 0.95
};

// Read with specific options
var advancedResults = BarcodeReader.Read(anyBitmap, readerOptions);
// Advanced barcode reading with options
var readerOptions = new BarcodeReaderOptions
{
    // Specify barcode types to search for
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Enable machine learning for better accuracy
    UseML = true,
    // Set confidence threshold
    Confidence = 0.95
};

// Read with specific options
var advancedResults = BarcodeReader.Read(anyBitmap, readerOptions);
$vbLabelText   $csharpLabel

Comment gérer les résultats de plusieurs BarCodes?

Le code ci-dessus prolonge l'exemple précédent. Après avoir alimenté la liste AnyBitmap, nous l'avons itérée et avons appelé la méthode Read sur chaque objet AnyBitmap, qui a renvoyé IronBarcode.BarcodeResults. Nous avons ensuite itéré sur les résultats pour imprimer les valeurs des codes-barres sur la console.

Lorsque vous traitez plusieurs BarCodes, tirez parti du traitement parallèle pour de meilleures performances :

// Parallel processing for multiple barcode images
var barcodeFiles = Directory.GetFiles("barcodes/", "*.png");
var allResults = new ConcurrentBag<BarcodeResult>();

Parallel.ForEach(barcodeFiles, file =>
{
    var bitmap = new System.Drawing.Bitmap(file);
    var anyBitmap = (AnyBitmap)bitmap;
    var results = BarcodeReader.Read(anyBitmap);

    foreach (var result in results)
    {
        allResults.Add(result);
    }

    bitmap.Dispose(); // Clean up resources
});

// Process all results
foreach (var result in allResults)
{
    Console.WriteLine($"Found {result.BarcodeType}: {result.Value}");
}
// Parallel processing for multiple barcode images
var barcodeFiles = Directory.GetFiles("barcodes/", "*.png");
var allResults = new ConcurrentBag<BarcodeResult>();

Parallel.ForEach(barcodeFiles, file =>
{
    var bitmap = new System.Drawing.Bitmap(file);
    var anyBitmap = (AnyBitmap)bitmap;
    var results = BarcodeReader.Read(anyBitmap);

    foreach (var result in results)
    {
        allResults.Add(result);
    }

    bitmap.Dispose(); // Clean up resources
});

// Process all results
foreach (var result in allResults)
{
    Console.WriteLine($"Found {result.BarcodeType}: {result.Value}");
}
$vbLabelText   $csharpLabel

Quelles autres Fonctionnalités d'IronDrawing puis-je utiliser?

la fonctionnalité de IronSoftware.Drawing s'étend au-delà du moulage d'images. Elle prend en charge les aspects liés au traitement de l'image tels que les couleurs et les fontes utiles pour styliser les codes-barres et les codes QR. Découvrez comment nous utilisons IronDrawing pour personnaliser et ajouter des logos aux codes QR.

IronDrawing offre de puissantes capacités de manipulation d'images complétant le traitement des codes-barres :

// Using IronDrawing for image preprocessing
using IronSoftware.Drawing;

// Load and preprocess an image before barcode reading
AnyBitmap preprocessedImage = AnyBitmap.FromFile("noisy-barcode.jpg");

// Apply image filters to improve barcode readability
preprocessedImage = preprocessedImage.ToGrayScale();
preprocessedImage = preprocessedImage.Contrast(1.5); // Increase contrast
preprocessedImage = preprocessedImage.Sharpen(); // Sharpen image

// Read the preprocessed barcode
var improvedResults = BarcodeReader.Read(preprocessedImage);
// Using IronDrawing for image preprocessing
using IronSoftware.Drawing;

// Load and preprocess an image before barcode reading
AnyBitmap preprocessedImage = AnyBitmap.FromFile("noisy-barcode.jpg");

// Apply image filters to improve barcode readability
preprocessedImage = preprocessedImage.ToGrayScale();
preprocessedImage = preprocessedImage.Contrast(1.5); // Increase contrast
preprocessedImage = preprocessedImage.Sharpen(); // Sharpen image

// Read the preprocessed barcode
var improvedResults = BarcodeReader.Read(preprocessedImage);
$vbLabelText   $csharpLabel

Pour les scénarios nécessitant des corrections d'image spécifiques, notre guide de correction d'image détaille l'utilisation de filtres pour améliorer la lisibilité des codes-barres.

Pourquoi choisir IronDrawing plutôt que System.Drawing?

IronDrawing offre des avantages convaincants par rapport à System.Drawing :

  1. <Prise en charge multiplateforme : Fonctionne de manière transparente sur Windows, Linux et macOS contrairement à System.Drawing (Windows uniquement dans .NET Core/5+)
  2. Architecture moderne : Construit sur SkiaSharp et ImageSharp pour de meilleures performances et une meilleure gestion de la mémoire
  3. Application simplifiée : Maintient les interfaces familières de type System.Drawing tout en ajoutant des commodités modernes
  4. Développement actif : Mises à jour et améliorations régulières, contrairement à System.Drawing en mode maintenance
  5. Meilleure intégration : Conçu spécifiquement pour des performances optimales avec les produits IronSoftware

Pour les considérations relatives au déploiement, en particulier pour les environnements cloud, consultez nos guides sur le déploiement vers Azure et le déploiement vers AWS, qui comprennent des notes spécifiques sur la compatibilité multiplateforme à l'aide d'IronDrawing.

Qu'il s'agisse de créer des applications de bureau, des services web ou des solutions cloud-natives, IronDrawing veille à ce que votre code de traitement des codes-barres reste portable et efficace sur toutes les plateformes, ce qui en fait le choix idéal pour le développement .NET moderne.

Questions Fréquemment Posées

Comment puis-je lire des codes-barres à partir d'objets System.Drawing sur des plateformes non Windows ?

IronBarcode gère automatiquement la lecture de codes-barres multiplateformes à partir d'objets System.Drawing grâce à IronDrawing, qui les convertit au format AnyBitmap. Cela résout la limitation de Microsoft selon laquelle System.Drawing est réservé à Windows, ce qui vous permet de lire les codes-barres sur les systèmes MacOS et Linux de manière transparente.

Qu'est-ce qu'IronDrawing et pourquoi est-il inclus dans la lecture de codes-barres ?

IronDrawing est une bibliothèque gratuite et open-source créée par IronSoftware qui fournit un support multiplateforme pour les opérations graphiques. Elle est automatiquement incluse lorsque vous installez IronBarcode depuis NuGet et permet la lecture de codes-barres à partir d'objets System.Drawing sur tous les systèmes d'exploitation en les convertissant au format compatible AnyBitmap.

Comment convertir un System.Drawing.Bitmap pour y lire des codes-barres ?

Vous pouvez lire des BarCodes à partir de System.Drawing.Bitmap avec un simple cast vers AnyBitmap : `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png"));`. IronBarcode gère la conversion automatiquement grâce à la fonctionnalité de casting implicite d'IronDrawing.

Puis-je lire des BarCodes sur Linux et MacOS en utilisant System.Drawing ?

Oui, IronBarcode permet la lecture de codes-barres à partir d'objets System.Drawing sur Linux et MacOS grâce à IronDrawing, qui convertit automatiquement les objets System.Drawing au format multiplateforme AnyBitmap. Cela permet de surmonter la limitation de Microsoft à Windows pour la prise en charge de System.Drawing.

Quels types d'objets System.Drawing peuvent être utilisés pour la lecture de codes-barres ?

IronBarcode prend en charge la lecture de codes-barres à partir de divers objets System.Drawing, notamment System.Drawing.Bitmap et d'autres types d'images. Ces dernières sont automatiquement converties en AnyBitmap grâce à la fonction de moulage implicite d'IronDrawing, ce qui permet une fonctionnalité de lecture de codes-barres multiplateforme.

Existe-t-il une solution simple en une ligne pour lire les codes-barres à partir de System.Drawing ?

Oui, IronBarcode fournit une solution en une ligne : `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png"));`. Cette simple ligne crée un System.Drawing.Bitmap, le convertit en AnyBitmap à travers IronDrawing, et lit tous les codes-barres présents dans l'image.

Hairil Hasyimi Bin Omar
Ingénieur logiciel
Comme tous les grands ingénieurs, Hairil est un apprenant avide. Il affine ses connaissances en C#, Python et Java, utilisant ces connaissances pour apporter de la valeur aux membres de l'équipe dans toute Iron Software. Hairil a rejoint l'équipe d'Iron Software depuis l'Université Teknologi MARA en Malaisie, ...
Lire la suite
Prêt à commencer?
Nuget Téléchargements 2,035,202 | Version : 2025.12 vient de sortir