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

How to Read Barcodes From System.Drawing in C

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

IronBarcode permet de lire les codes-barres des 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 concernant la prise en charge de System.Drawing, réservée à Windows.

Introduction

Les objets System.Drawing sont largement utilisés dans .NET pour les tâches de traitement d'images. Cependant, Microsoft a cessé de prendre en charge System.Drawing sur macOS et Linux, et ne prend désormais en charge que Windows. Ce changement a posé des problèmes aux développeurs utilisant IronBarcode sur des systèmes d'exploitation autres que Windows, car le travail avec les codes-barres implique généralement des graphiques, des images et des polices.

Pour résoudre ce problème, nous avons lancé IronDrawing. Cette bibliothèque gratuite et open source, créée par Iron Software, simplifie la prise en charge multiplateforme et offre une expérience fluide. Lorsque vous installez IronBarcode depuis NuGet, IronDrawing est automatiquement inclus dans votre projet.

Pour les développeurs novices en lecture de BarCodes, consultez notre tutoriel complet sur la lecture de BarCodes, qui couvre les concepts fondamentaux et les modèles d'utilisation de base. Si vous travaillez avec différents formats d'image, notre guide sur la lecture de BARCODES à partir d'images fournit des informations supplémentaires et des exemples.

Guide de démarrage rapide : Lire un BARCODE à l'aide de AnyBitmap en une seule ligne simple

Cet extrait montre comment IronBarcode lit les BarCodes en créant un System.Drawing.Bitmap et en laissant IronDrawing le convertir implicitement en AnyBitmap. En une seule ligne, les développeurs, quel que soit leur système d'exploitation, obtiennent des résultats rapides.

  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 avec un essai gratuit

    arrow pointer

Comment convertir des objets System.Drawing en AnyBitmap ?

La lecture des Barcodes au format System.Drawing nécessite de convertir l'objet au format AnyBitmap. IronDrawing a été conçu pour être facile à utiliser et prend en charge la conversion implicite des objets image de System.Drawing en objets image IronSoftware.Drawing appelés AnyBitmap.

Au-delà des objets System.Drawing, nous prenons en charge la conversion à partir d'autres types :

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

Consultez cet exemple de code pour le transtypage des objets ci-dessus. L'exemple ci-dessous montre la conversion d'images de BarCodes provenant d'objets System.Drawing en IronSoftware.Drawing.AnyBitmap :

Quels types System.Drawing peuvent être convertis ?

: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);
Imports IronSoftware.Drawing
Imports System.Collections.Generic

Private barcodes As New List(Of AnyBitmap)()

' Instantiate System.Drawing.Bitmap
Private bitmapFromBitmap As New System.Drawing.Bitmap("test1.jpg")

' Cast from System.Drawing.Bitmap to AnyBitmap
Private barcode1 As AnyBitmap = bitmapFromBitmap

barcodes.Add(barcode1)

' Instantiate System.Drawing.Bitmap
Dim bitmapFromFile As System.Drawing.Image = System.Drawing.Image.FromFile("test2.png")

' Cast from System.Drawing.Image to AnyBitmap
Dim barcode2 As AnyBitmap = bitmapFromFile

barcodes.Add(barcode2)
$vbLabelText   $csharpLabel

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

Pourquoi le transtypage implicite fonctionne-t-il ?

Dans le code ci-dessus, nous avons chargé deux images de BarCode sous les noms System.Drawing.Bitmap et System.Drawing.Image. Nous les avons ensuite implicitement convertis en AnyBitmap en les affectant à des objets AnyBitmap, puis avons ajouté ces objets à une liste AnyBitmap.

Le mécanisme de transtypage implicite de IronDrawing utilise la surcharge d'opérateurs, offrant 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 des images, y compris la résolution, la profondeur de couleur et les données de pixels, garantissant ainsi qu'il n'y a aucune perte de qualité.

Quand dois-je utiliser le transtypage explicite plutôt qu'implicite ?

Bien que le transtypage implicite offre une certaine commodité, le transtypage explicite peut être préférable dans certains cas :

// 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
}
Imports System.Drawing

' Implicit casting - clean and simple for straightforward conversions
Dim systemBitmap As New Bitmap("barcode.png")
Dim anyBitmap As AnyBitmap = systemBitmap ' Implicit cast

' Explicit casting - useful when type clarity is important
Dim systemImage As Image = Image.FromFile("qrcode.jpg")
Dim explicitBitmap As AnyBitmap = CType(systemImage, AnyBitmap) ' Explicit cast

' When working with nullable types or conditional logic
Dim nullableBitmap As Bitmap = GetBitmapFromSource()
If nullableBitmap IsNot Nothing Then
    Dim result As AnyBitmap = CType(nullableBitmap, AnyBitmap) ' Explicit cast for clarity
    ' Process the barcode
End If
$vbLabelText   $csharpLabel

Quelles sont les erreurs de conversion 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 transtypage
  2. Exceptions liées aux formats non pris en charge : certains formats d'image peu courants nécessitent une conversion préalable
  3. Problèmes de mémoire : les images volumineuses nécessitent des modèles de gestion appropriés

Pour résoudre les problèmes de conversion, notre guide de dépannage fournit des solutions aux problèmes courants rencontrés lors de la reconnaissance des BarCodes.

Comment lire les BarCodes à partir d'objets AnyBitmap ?

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 autres que Windows. Le code suivant en est une illustration :

Quelles méthodes 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;

// Create a list of image file paths to read barcodes from
List<string> barcodeFiles = new List<string>
{
    "test1.jpg",
    "test2.png"
};

foreach (var barcodeFile in barcodeFiles)
{
    // Read the barcode from file path
    var results = BarcodeReader.Read(barcodeFile);
    foreach (var result in results)
    {
        // Output the detected barcode value
        Console.WriteLine(result.Value);
    }
}
Imports IronBarCode
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Generic

' Create a list of image file paths to read barcodes from
Dim barcodeFiles As New List(Of String) From {
    "test1.jpg",
    "test2.png"
}

For Each barcodeFile In barcodeFiles
    ' Read the barcode from file path
    Dim results = BarcodeReader.Read(barcodeFile)
    For Each result In results
        ' Output the detected barcode value
        Console.WriteLine(result.Value)
    Next
Next
$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 BarCodes, qui illustre le traitement efficace de plusieurs BarCodes dans une seule image :

// Advanced barcode reading with options
var readerOptions = new BarcodeReaderOptions
{
    // Specify barcode types to search for
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Co/de128,
    // 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.Co/de128,
    // 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
Dim readerOptions As New BarcodeReaderOptions With {
    ' Specify barcode types to search for
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128,
    ' Enable machine learning for better accuracy
    .UseML = True,
    ' Set confidence threshold
    .Confidence = 0.95
}

' Read with specific options
Dim advancedResults = BarcodeReader.Read(anyBitmap, readerOptions)
$vbLabelText   $csharpLabel

Comment gérer plusieurs résultats de BarCodes ?

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

Lors du traitement de plusieurs BarCodes, utilisez le traitement parallèle pour améliorer les 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}");
}
Imports System.IO
Imports System.Collections.Concurrent
Imports System.Drawing
Imports System.Threading.Tasks

' Parallel processing for multiple barcode images
Dim barcodeFiles = Directory.GetFiles("barcodes/", "*.png")
Dim allResults = New ConcurrentBag(Of BarcodeResult)()

Parallel.ForEach(barcodeFiles, Sub(file)
                                   Dim bitmap = New Bitmap(file)
                                   Dim anyBitmap = CType(bitmap, AnyBitmap)
                                   Dim results = BarcodeReader.Read(anyBitmap)

                                   For Each result In results
                                       allResults.Add(result)
                                   Next

                                   bitmap.Dispose() ' Clean up resources
                               End Sub)

' Process all results
For Each result In allResults
    Console.WriteLine($"Found {result.BarcodeType}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Quelles autres fonctionnalités IronDrawing puis-je utiliser ?

IronSoftware.Drawing La fonctionnalité va au-delà de la conversion d'images. Elle gère les aspects liés au traitement d'images, tels que les couleurs et les polices, utiles pour la mise en forme des barcodes et des QR. Découvrez comment nous utilisons IronDrawing pour personnaliser et ajouter des logos aux codes QR.

IronDrawing offre de puissantes fonctionnalités de manipulation d'images qui complètent le traitement des BarCodes :

// 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.Co/ntrast(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.Co/ntrast(1.5); // Increase contrast
preprocessedImage = preprocessedImage.Sharpen(); // Sharpen image

// Read the preprocessed barcode
var improvedResults = BarcodeReader.Read(preprocessedImage);
Imports IronSoftware.Drawing

' Load and preprocess an image before barcode reading
Dim preprocessedImage As AnyBitmap = 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
Dim improvedResults = BarcodeReader.Read(preprocessedImage)
$vbLabelText   $csharpLabel

Pour les cas nécessitant des corrections d'image spécifiques, notre guide de correction d'image explique en détail comment utiliser des filtres pour améliorer la lisibilité des BarCodes.

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 sous Windows, Linux et macOS, contrairement à System.Drawing (Windows uniquement dans .NET Core/5+)
  2. Architecture moderne : basée sur SkiaSharp et ImageSharp pour de meilleures performances et une meilleure gestion de la mémoire
  3. API simplifiée : conserve des interfaces familières de type System.Drawing tout en ajoutant des fonctionnalité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 Iron Software

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

Que vous développiez des applications de bureau, des services web ou des solutions cloud natives, IronDrawing garantit que votre code de traitement des BarCodes 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 Iron Software 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 using 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.

IronBarcode offre-t-il des options de personnalisation pour l'apparence des codes-barres ?

Oui, IronBarcode offre des options de personnalisation étendues pour l'apparence des codes-barres, y compris des annotations de couleur, taille et texte, vous permettant d'adapter les codes-barres à vos exigences de conception spécifiques.

Comment IronBarcode peut-il aider à améliorer l'efficacité des processus d'affaires ?

IronBarcode améliore l'efficacité des processus d'affaires en permettant une génération et une lecture rapides et précises des codes-barres, réduisant les erreurs de saisie manuelle de données, et améliorant le suivi des stocks et des actifs.

Quelles compétences en programmation sont nécessaires pour implémenter IronBarcode dans un projet ?

Une connaissance de base de la programmation C# est suffisante pour implémenter IronBarcode dans un projet, car il fournit des méthodes simples et une documentation complète pour guider les développeurs.

IronBarcode convient-il aux petits projets ainsi qu'aux grandes applications d'entreprise ?

IronBarcode est conçu pour être évolutif et polyvalent, ce qui le rend approprié pour les petits projets ainsi que pour les grandes applications d'entreprise nécessitant des solutions de codes-barres robustes.

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,230,745 | Version : 2026.5 just released
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package BarCode
exécuter un échantillon regarder votre chaîne devenir un code-barres.