Comment lire des codes-barres en C#

C# Barcode Scanner: Read Barcodes & QR Codes in .NET Applications

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

Need to quickly scan barcodes or QR codes in your .NET application? IronBarcode makes barcode reading simple and reliable, whether you're processing perfect digital images or challenging real-world photos. This guide shows you exactly how to implement barcode scanning in C# with practical examples you can use immediately.

Quickstart: Read a Barcode from a File Instantly

This quick example shows you how easy it is to get started with IronBarcode. In just one line of code, you can read barcodes from an image file—no complex setup required.

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode

  2. Copy and run this code snippet.

    var results = IronBarCode.BarcodeReader.Read("path/to/barcode.png");
  3. Deploy to test on your live environment

    Start using IronBarcode in your project today with a free trial
    arrow pointer

How do I install IronBarcode in my .NET project?

IronBarcode installs easily through NuGet Package Manager or by downloading the DLL directly. The NuGet installation is the recommended approach as it automatically manages dependencies and updates.

Commencez à utiliser IronBarcode dans votre projet aujourd'hui avec un essai gratuit.

Première étape :
green arrow pointer

Install-Package BarCode

After installation, add using IronBarCode; to your C# files to access the barcode scanning functionality. For detailed installation instructions across different development environments, check our installation guide.

How can I read my first barcode using C#?

Reading barcodes with IronBarcode requires just one line of code. The library automatically detects barcode formats and extracts all encoded data.

Code128 barcode ready for scanning - contains text 'https://ironsoftware.com/csharp/barcode/' A standard Code128 barcode that IronBarcode can read instantly
using IronBarCode;
using System;

// Read barcodes from the image file - supports PNG, JPG, BMP, GIF, and more
BarcodeResults results = BarcodeReader.Read("GetStarted.png");

// Check if any barcodes were detected
if (results != null && results.Count > 0)
{
    // Process each barcode found in the image
    foreach (BarcodeResult result in results)
    {
        // Extract the text value from the barcode
        Console.WriteLine("Barcode detected! Value: " + result.Text);

        // Additional properties available:
        // result.BarcodeType - The format (Code128, QR, etc.)
        // result.BinaryValue - Raw binary data if applicable
        // result.Confidence - Detection confidence score
    }
}
else
{
    Console.WriteLine("No barcodes detected in the image.");
}
using IronBarCode;
using System;

// Read barcodes from the image file - supports PNG, JPG, BMP, GIF, and more
BarcodeResults results = BarcodeReader.Read("GetStarted.png");

// Check if any barcodes were detected
if (results != null && results.Count > 0)
{
    // Process each barcode found in the image
    foreach (BarcodeResult result in results)
    {
        // Extract the text value from the barcode
        Console.WriteLine("Barcode detected! Value: " + result.Text);

        // Additional properties available:
        // result.BarcodeType - The format (Code128, QR, etc.)
        // result.BinaryValue - Raw binary data if applicable
        // result.Confidence - Detection confidence score
    }
}
else
{
    Console.WriteLine("No barcodes detected in the image.");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

The BarcodeReader.Read method returns a BarcodeResults collection containing all detected barcodes. Each BarcodeResult provides access to the barcode's text value, format type, position coordinates, and binary data. This approach works seamlessly with common barcode formats including Code128, Code39, QR codes, and Data Matrix codes.

What options help read challenging or damaged barcodes?

Real-world barcode scanning often involves imperfect images - skewed angles, poor lighting, or partial damage. IronBarcode's advanced options handle these challenges effectively.

using IronBarCode;

// Configure advanced reading options for difficult barcodes
BarcodeReaderOptions options = new BarcodeReaderOptions
{
    // Speed settings: Faster, Balanced, Detailed, ExtremeDetail
    // ExtremeDetail performs deep analysis for challenging images
    Speed = ReadingSpeed.ExtremeDetail,

    // Specify expected formats to improve performance
    // Use bitwise OR (|) to combine multiple formats
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,

    // Maximum number of barcodes to find (0 = unlimited)
    MaxParallelThreads = 4,

    // Crop region for faster processing of specific areas
    CropArea = null // Or specify a Rectangle
};

// Apply options when reading
BarcodeResults results = BarcodeReader.Read("TryHarderQR.png", options);

// Process detected barcodes
foreach (var barcode in results)
{
    Console.WriteLine($"Format: {barcode.BarcodeType}, Value: {barcode.Text}");
}
using IronBarCode;

// Configure advanced reading options for difficult barcodes
BarcodeReaderOptions options = new BarcodeReaderOptions
{
    // Speed settings: Faster, Balanced, Detailed, ExtremeDetail
    // ExtremeDetail performs deep analysis for challenging images
    Speed = ReadingSpeed.ExtremeDetail,

    // Specify expected formats to improve performance
    // Use bitwise OR (|) to combine multiple formats
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,

    // Maximum number of barcodes to find (0 = unlimited)
    MaxParallelThreads = 4,

    // Crop region for faster processing of specific areas
    CropArea = null // Or specify a Rectangle
};

// Apply options when reading
BarcodeResults results = BarcodeReader.Read("TryHarderQR.png", options);

// Process detected barcodes
foreach (var barcode in results)
{
    Console.WriteLine($"Format: {barcode.BarcodeType}, Value: {barcode.Text}");
}
Imports IronBarCode

' Configure advanced reading options for difficult barcodes
Private options As New BarcodeReaderOptions With {
	.Speed = ReadingSpeed.ExtremeDetail,
	.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128,
	.MaxParallelThreads = 4,
	.CropArea = Nothing
}

' Apply options when reading
Private results As BarcodeResults = BarcodeReader.Read("TryHarderQR.png", options)

' Process detected barcodes
For Each barcode In results
	Console.WriteLine($"Format: {barcode.BarcodeType}, Value: {barcode.Text}")
Next barcode
$vbLabelText   $csharpLabel
QR code rotated 45 degrees demonstrating IronBarcode's rotation handling A rotated QR code that IronBarcode successfully reads using advanced options

The ExpectBarcodeTypes property significantly improves performance by limiting the search to specific formats. For maximum accuracy with problematic images, combine image filters with automatic rotation:

using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions
{
    // Apply image processing filters to enhance readability
    ImageFilters = new ImageFilterCollection
    {
        new AdaptiveThresholdFilter(9, 0.01f), // Handles varying lighting
        new ContrastFilter(2.0f),               // Increases contrast
        new SharpenFilter()                     // Reduces blur
    },

    // Automatically rotate to find barcodes at any angle
    AutoRotate = true,

    // Use multiple CPU cores for faster processing
    Multithreaded = true
};

BarcodeResults results = BarcodeReader.Read("TryHarderQR.png", options);

foreach (var result in results)
{
    Console.WriteLine($"Detected {result.BarcodeType}: {result.Text}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
    Console.WriteLine($"Position: X={result.X}, Y={result.Y}");
}
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions
{
    // Apply image processing filters to enhance readability
    ImageFilters = new ImageFilterCollection
    {
        new AdaptiveThresholdFilter(9, 0.01f), // Handles varying lighting
        new ContrastFilter(2.0f),               // Increases contrast
        new SharpenFilter()                     // Reduces blur
    },

    // Automatically rotate to find barcodes at any angle
    AutoRotate = true,

    // Use multiple CPU cores for faster processing
    Multithreaded = true
};

BarcodeResults results = BarcodeReader.Read("TryHarderQR.png", options);

foreach (var result in results)
{
    Console.WriteLine($"Detected {result.BarcodeType}: {result.Text}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
    Console.WriteLine($"Position: X={result.X}, Y={result.Y}");
}
Imports IronBarCode

Private options As New BarcodeReaderOptions With {
	.ImageFilters = New ImageFilterCollection From {
		New AdaptiveThresholdFilter(9, 0.01F),
		New ContrastFilter(2.0F),
		New SharpenFilter()
	},
	.AutoRotate = True,
	.Multithreaded = True
}

Private results As BarcodeResults = BarcodeReader.Read("TryHarderQR.png", options)

For Each result In results
	Console.WriteLine($"Detected {result.BarcodeType}: {result.Text}")
	Console.WriteLine($"Confidence: {result.Confidence}%")
	Console.WriteLine($"Position: X={result.X}, Y={result.Y}")
Next result
$vbLabelText   $csharpLabel

These advanced features make IronBarcode ideal for scanning barcodes from photos, security cameras, or mobile device captures where image quality varies significantly.

How do I scan multiple barcodes from PDF documents?

PDF barcode scanning is essential for processing invoices, shipping labels, and inventory documents. IronBarcode reads all barcodes across every page efficiently.

Reading barcodes from PDF files

using System;
using IronBarCode;

try
{
    // Scan all pages of a PDF for barcodes
    BarcodeResults results = BarcodeReader.ReadPdf("MultipleBarcodes.pdf");

    if (results != null && results.Count > 0)
    {
        foreach (var barcode in results)
        {
            // Access barcode data and metadata
            string value = barcode.Text;
            int pageNumber = barcode.PageNumber;
            BarcodeEncoding format = barcode.BarcodeType;
            byte[] binaryData = barcode.BinaryValue;

            // Extract barcode image if needed
            System.Drawing.Bitmap barcodeImage = barcode.BarcodeImage;

            Console.WriteLine($"Found {format} on page {pageNumber}: {value}");
        }
    }
    else
    {
        Console.WriteLine("No barcodes found in the PDF.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading PDF: {ex.Message}");
}
using System;
using IronBarCode;

try
{
    // Scan all pages of a PDF for barcodes
    BarcodeResults results = BarcodeReader.ReadPdf("MultipleBarcodes.pdf");

    if (results != null && results.Count > 0)
    {
        foreach (var barcode in results)
        {
            // Access barcode data and metadata
            string value = barcode.Text;
            int pageNumber = barcode.PageNumber;
            BarcodeEncoding format = barcode.BarcodeType;
            byte[] binaryData = barcode.BinaryValue;

            // Extract barcode image if needed
            System.Drawing.Bitmap barcodeImage = barcode.BarcodeImage;

            Console.WriteLine($"Found {format} on page {pageNumber}: {value}");
        }
    }
    else
    {
        Console.WriteLine("No barcodes found in the PDF.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading PDF: {ex.Message}");
}
Imports System
Imports IronBarCode

Try
	' Scan all pages of a PDF for barcodes
	Dim results As BarcodeResults = BarcodeReader.ReadPdf("MultipleBarcodes.pdf")

	If results IsNot Nothing AndAlso results.Count > 0 Then
		For Each barcode In results
			' Access barcode data and metadata
			Dim value As String = barcode.Text
			Dim pageNumber As Integer = barcode.PageNumber
			Dim format As BarcodeEncoding = barcode.BarcodeType
			Dim binaryData() As Byte = barcode.BinaryValue

			' Extract barcode image if needed
			Dim barcodeImage As System.Drawing.Bitmap = barcode.BarcodeImage

			Console.WriteLine($"Found {format} on page {pageNumber}: {value}")
		Next barcode
	Else
		Console.WriteLine("No barcodes found in the PDF.")
	End If
Catch ex As Exception
	Console.WriteLine($"Error reading PDF: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

Multiple barcodes detected across PDF pages showing console output Console output showing multiple barcodes found across different PDF pages

For specific page ranges or advanced PDF processing, use BarcodeReaderOptions:

// Read only specific pages to improve performance
BarcodeReaderOptions pdfOptions = new BarcodeReaderOptions
{
    // Scan pages 1-5 only
    PageNumbers = new[] { 1, 2, 3, 4, 5 },

    // PDF-specific settings
    PdfDpi = 300, // Higher DPI for better accuracy
    ReadBehindVectorGraphics = true
};

BarcodeResults results = BarcodeReader.ReadPdf("document.pdf", pdfOptions);
// Read only specific pages to improve performance
BarcodeReaderOptions pdfOptions = new BarcodeReaderOptions
{
    // Scan pages 1-5 only
    PageNumbers = new[] { 1, 2, 3, 4, 5 },

    // PDF-specific settings
    PdfDpi = 300, // Higher DPI for better accuracy
    ReadBehindVectorGraphics = true
};

BarcodeResults results = BarcodeReader.ReadPdf("document.pdf", pdfOptions);
' Read only specific pages to improve performance
Dim pdfOptions As New BarcodeReaderOptions With {
	.PageNumbers = { 1, 2, 3, 4, 5 },
	.PdfDpi = 300,
	.ReadBehindVectorGraphics = True
}

Dim results As BarcodeResults = BarcodeReader.ReadPdf("document.pdf", pdfOptions)
$vbLabelText   $csharpLabel

Learn more about PDF barcode extraction techniques in our detailed examples.

How can I process multiframe TIFF images?

Multiframe TIFF files, common in document scanning and fax systems, receive the same comprehensive support as PDFs.

Multiframe TIFF containing multiple barcodes across frames A multiframe TIFF file with barcodes on different frames

using IronBarCode;

// TIFF files are processed similarly to regular images
// Each frame is scanned automatically
BarcodeResults multiFrameResults = BarcodeReader.Read("Multiframe.tiff");

foreach (var result in multiFrameResults)
{
    // Access frame-specific information
    int frameNumber = result.PageNumber; // Frame number in TIFF
    string barcodeValue = result.Text;

    Console.WriteLine($"Frame {frameNumber}: {barcodeValue}");

    // Save individual barcode images if needed
    result.BarcodeImage?.Save($"barcode_frame_{frameNumber}.png");
}
using IronBarCode;

// TIFF files are processed similarly to regular images
// Each frame is scanned automatically
BarcodeResults multiFrameResults = BarcodeReader.Read("Multiframe.tiff");

foreach (var result in multiFrameResults)
{
    // Access frame-specific information
    int frameNumber = result.PageNumber; // Frame number in TIFF
    string barcodeValue = result.Text;

    Console.WriteLine($"Frame {frameNumber}: {barcodeValue}");

    // Save individual barcode images if needed
    result.BarcodeImage?.Save($"barcode_frame_{frameNumber}.png");
}
Imports IronBarCode

' TIFF files are processed similarly to regular images
' Each frame is scanned automatically
Private multiFrameResults As BarcodeResults = BarcodeReader.Read("Multiframe.tiff")

For Each result In multiFrameResults
	' Access frame-specific information
	Dim frameNumber As Integer = result.PageNumber ' Frame number in TIFF
	Dim barcodeValue As String = result.Text

	Console.WriteLine($"Frame {frameNumber}: {barcodeValue}")

	' Save individual barcode images if needed
	If result.BarcodeImage IsNot Nothing Then
		result.BarcodeImage.Save($"barcode_frame_{frameNumber}.png")
	End If
Next result
$vbLabelText   $csharpLabel

The same BarcodeReaderOptions apply to TIFF processing, including image filters and rotation settings. For detailed TIFF handling scenarios, see our image processing tutorials.

Can I speed up processing with multithreading?

Processing multiple documents benefits dramatically from parallel processing. IronBarcode automatically utilizes available CPU cores for optimal performance.

using IronBarCode;

// List of documents to process - mix of formats supported
var documentBatch = new[] 
{ 
    "invoice1.pdf", 
    "shipping_label.png", 
    "inventory_sheet.tiff",
    "product_catalog.pdf"
};

// Configure for batch processing
BarcodeReaderOptions batchOptions = new BarcodeReaderOptions
{
    // Enable parallel processing across documents
    Multithreaded = true,

    // Limit threads if needed (0 = use all cores)
    MaxParallelThreads = Environment.ProcessorCount,

    // Apply consistent settings to all documents
    Speed = ReadingSpeed.Balanced,
    ExpectBarcodeTypes = BarcodeEncoding.All
};

// Process all documents in parallel
BarcodeResults batchResults = BarcodeReader.Read(documentBatch, batchOptions);

// Group results by source document
var resultsByDocument = batchResults.GroupBy(r => r.Filename);

foreach (var docGroup in resultsByDocument)
{
    Console.WriteLine($"\nDocument: {docGroup.Key}");
    foreach (var barcode in docGroup)
    {
        Console.WriteLine($"  - {barcode.BarcodeType}: {barcode.Text}");
    }
}
using IronBarCode;

// List of documents to process - mix of formats supported
var documentBatch = new[] 
{ 
    "invoice1.pdf", 
    "shipping_label.png", 
    "inventory_sheet.tiff",
    "product_catalog.pdf"
};

// Configure for batch processing
BarcodeReaderOptions batchOptions = new BarcodeReaderOptions
{
    // Enable parallel processing across documents
    Multithreaded = true,

    // Limit threads if needed (0 = use all cores)
    MaxParallelThreads = Environment.ProcessorCount,

    // Apply consistent settings to all documents
    Speed = ReadingSpeed.Balanced,
    ExpectBarcodeTypes = BarcodeEncoding.All
};

// Process all documents in parallel
BarcodeResults batchResults = BarcodeReader.Read(documentBatch, batchOptions);

// Group results by source document
var resultsByDocument = batchResults.GroupBy(r => r.Filename);

foreach (var docGroup in resultsByDocument)
{
    Console.WriteLine($"\nDocument: {docGroup.Key}");
    foreach (var barcode in docGroup)
    {
        Console.WriteLine($"  - {barcode.BarcodeType}: {barcode.Text}");
    }
}
Imports Microsoft.VisualBasic
Imports IronBarCode

' List of documents to process - mix of formats supported
Private documentBatch = { "invoice1.pdf", "shipping_label.png", "inventory_sheet.tiff", "product_catalog.pdf" }

' Configure for batch processing
Private batchOptions As New BarcodeReaderOptions With {
	.Multithreaded = True,
	.MaxParallelThreads = Environment.ProcessorCount,
	.Speed = ReadingSpeed.Balanced,
	.ExpectBarcodeTypes = BarcodeEncoding.All
}

' Process all documents in parallel
Private batchResults As BarcodeResults = BarcodeReader.Read(documentBatch, batchOptions)

' Group results by source document
Private resultsByDocument = batchResults.GroupBy(Function(r) r.Filename)

For Each docGroup In resultsByDocument
	Console.WriteLine($vbLf & "Document: {docGroup.Key}")
	For Each barcode In docGroup
		Console.WriteLine($"  - {barcode.BarcodeType}: {barcode.Text}")
	Next barcode
Next docGroup
$vbLabelText   $csharpLabel

This parallel approach processes documents simultaneously, reducing total scanning time by up to 75% on multicore systems. For enterprise-scale barcode processing, explore our performance optimization guide.

Summary

IronBarcode transforms complex barcode scanning into straightforward C# code. Whether you're building inventory systems, document processors, or mobile applications, the library handles everything from pristine digital barcodes to challenging real-world captures.

Key capabilities covered:

  • Single-line barcode reading from images
  • Advanced options for damaged or rotated barcodes
  • Comprehensive PDF and TIFF document scanning
  • High-performance batch processing with multithreading
  • Support for all major barcode formats

Further Reading

Expand your barcode processing capabilities with these resources:

Source Code Downloads

Run these examples yourself:

Ready to implement barcode scanning in your application? Start your free trial and add professional barcode reading to your .NET project today.

Commencez avec IronBarcode maintenant.
green arrow pointer

Questions Fréquemment Posées

Comment puis-je installer une bibliothèque de lecture de codes-barres dans un projet .NET ?

Vous pouvez installer la bibliothèque IronBarcode via le gestionnaire de packages NuGet avec la commande dotnet add package BarCode ou via l'interface NuGet de Visual Studio. Alternativement, téléchargez le DLL pour une installation manuelle.

Quelle est la méthode pour lire un code-barres à partir d'une image en utilisant C# ?

Utilisez la méthode BarcodeReader.Read d'IronBarcode avec une seule ligne de code : var results = BarcodeReader.Read('image.png'); Cette méthode détecte et lit tous les formats de codes-barres présents dans l'image.

Est-il possible de détecter plusieurs codes-barres dans une seule image ou un document ?

Oui, IronBarcode peut automatiquement détecter et lire plusieurs codes-barres dans une image, un PDF ou un TIFF multiframe, renvoyant la valeur, le type et la position de chaque code-barres dans une collection BarcodeResults.

Comment puis-je lire des codes-barres à partir d'un PDF en utilisant C# ?

Utilisez la méthode BarcodeReader.ReadPdf d'IronBarcode pour scanner toutes les pages d'un document PDF : var results = BarcodeReader.ReadPdf('document.pdf'); Chaque résultat comprend le numéro de page où le code-barres a été trouvé.

Que dois-je faire si les images de codes-barres sont floues ou tournées ?

Configurez BarcodeReaderOptions pour gérer les images difficiles en configurant AutoRotate = true et en appliquant des filtres d'image comme SharpenFilter ou AdaptiveThresholdFilter. Utilisez Speed = ExtremeDetail pour une meilleure précision.

Quels formats de code-barres sont pris en charge dans les applications .NET ?

IronBarcode prend en charge tous les principaux formats de codes-barres tels que le QR Code, Code 128, Code 39, EAN-13, UPC-A, Data Matrix, PDF417, et plus. Utilisez BarcodeEncoding.All pour scanner tout format pris en charge.

Comment puis-je améliorer la performance de la lecture de codes-barres dans une application C# ?

Améliorez les performances en spécifiant les types de codes-barres attendus avec ExpectBarcodeTypes, en activant le traitement multithreads, et en choisissant les réglages Speed appropriés. Pour les tâches en lots, utilisez BarcodeReader.Read avec des chemins de fichiers.

Quelle est l'approche recommandée pour gérer les erreurs de lecture de codes-barres ?

Encapsulez la lecture de codes-barres dans des blocs try-catch et vérifiez si les résultats sont nuls ou vides. IronBarcode fournit des messages d'erreur détaillés et une propriété de Confiance pour indiquer la fiabilité de la détection.

Puis-je extraire des images de codes-barres après leur scan ?

Oui, BarcodeResult d'IronBarcode inclut une propriété BarcodeImage qui contient un Bitmap du code-barres détecté, qui peut être enregistré ou traité séparément.

Comment puis-je lire des codes-barres à partir de pages spécifiques dans un document PDF ?

Définissez la propriété PageNumbers dans BarcodeReaderOptions pour spécifier les pages : options.PageNumbers = new[] {1, 2, 3}; Cela optimise les performances en scannant uniquement les pages désignées.

Quels formats d'images sont compatibles avec la lecture de codes-barres dans .NET ?

IronBarcode prend en charge le scan dans des formats tels que PNG, JPEG, BMP, GIF, TIFF (y compris multiframe), et PDF. Vous pouvez charger des images à partir de chemins de fichiers, de flux ou de tableaux d'octets.

Comment puis-je accéder aux données binaires des codes-barres scannés en C# ?

Utilisez la propriété BinaryValue de BarcodeResult pour obtenir des données binaires brutes, particulièrement utiles pour les codes-barres contenant des données non-textuelles telles que des informations compressées ou des protocoles binaires.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur technique chez Iron Software et un ingénieur visionnaire pionnier dans la technologie des PDF en C#. En tant que développeur original derrière la base de code principale d'Iron Software, il a façonné l'architecture du produit de l'entreprise depuis sa création, ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 1,935,276 | Version : 2025.11 vient de sortir