Como ler códigos de barras em 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

Precisa escanear rapidamente códigos de barras ou códigos QR em sua aplicação .NET? O IronBarcode torna a leitura de códigos de barras simples e confiável, seja você processando imagens digitais perfeitas ou fotos desafiadoras do mundo real. Este guia mostra exatamente como implementar a escaneamento de códigos de barras em C# com exemplos práticos que você pode usar imediatamente.

Início Rápido: Leia um Código de Barras de um Arquivo Instantaneamente

Este exemplo rápido mostra como é fácil começar com o IronBarcode. Com apenas uma linha de código, você pode ler códigos de barras de um arquivo de imagem — sem necessidade de configuração complexa.

  1. Instale IronBarcode com o Gerenciador de Pacotes NuGet

    PM > Install-Package BarCode
  2. Copie e execute este trecho de código.

    var results = IronBarCode.BarcodeReader.Read("path/to/barcode.png");
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronBarcode em seu projeto hoje com uma avaliação gratuita

    arrow pointer

Como instalo o IronBarcode no meu projeto .NET?

O IronBarcode instala facilmente através do NuGet Package Manager ou baixando o DLL diretamente. A instalação pelo NuGet é a abordagem recomendada, pois gerencia automaticamente dependências e atualizações.

Install-Package BarCode

Após a instalação, adicione using IronBarCode; aos seus arquivos C# para acessar a funcionalidade de escaneamento de código de barras. Para instruções detalhadas de instalação em diferentes ambientes de desenvolvimento, confira nosso guia de instalação.

Como posso ler meu primeiro código de barras usando C#?

Ler códigos de barras com IronBarcode requer apenas uma linha de código. A biblioteca detecta automaticamente formatos de código de barras e extrai todos os dados codificados.

Code128 barcode ready for scanning - contains text 'https://ironsoftware.com/csharp/barcode/' *Um código de barras Code128 padrão que o IronBarcode pode ler instantaneamente*
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.");
}
$vbLabelText   $csharpLabel

O método BarcodeReader.Read retorna uma coleção BarcodeResults contendo todos os códigos de barras detectados. Cada BarcodeResult fornece acesso ao valor de texto, tipo de formato, coordenadas de posição e dados binários do código de barras. Essa abordagem funciona perfeitamente com formatos de código de barras comuns, incluindo Code128, Code39, códigos QR e códigos Data Matrix.

Quais opções ajudam a ler códigos de barras desafiadores ou danificados?

A leitura de códigos de barras no mundo real frequentemente envolve imagens imperfeitas - ângulos tortos, iluminação ruim ou danos parciais. As opções avançadas do IronBarcode lidam eficazmente com esses desafios.

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}");
}
$vbLabelText   $csharpLabel
QR code rotated 45 degrees demonstrating IronBarcode's rotation handling *Um código QR rotacionado que o IronBarcode lê com sucesso usando opções avançadas*

A propriedade ExpectBarcodeTypes melhora significativamente o desempenho ao limitar a pesquisa a formatos específicos. Para máxima precisão com imagens problemáticas, combine filtros de imagem com rotação automática:

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}");
}
$vbLabelText   $csharpLabel

Esses recursos avançados tornam o IronBarcode ideal para escaneamento de códigos de barras a partir de fotos, câmeras de segurança ou capturas de dispositivos móveis onde a qualidade da imagem varia significativamente.

Como escaneio múltiplos códigos de barras de documentos PDF?

O escaneamento de códigos de barras de PDF é essencial para o processamento de faturas, etiquetas de envio e documentos de inventário. O IronBarcode lê todos os códigos de barras em cada página de forma eficiente.

Lendo códigos de barras de arquivos PDF

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}");
}
$vbLabelText   $csharpLabel

Vários códigos de barras detectados nas páginas do PDF mostrando a saída do console Saída do console mostrando múltiplos códigos de barras encontrados em diferentes páginas de PDF

Para intervalos de páginas específicos ou processamento avançado de PDF, 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);
$vbLabelText   $csharpLabel

Como posso processar imagens TIFF multiframe?

Arquivos TIFF multiframe, comuns em escaneamento de documentos e sistemas de fax, recebem o mesmo suporte abrangente que PDFs.

TIFF multiframe contendo vários códigos de barras através de quadros Um arquivo TIFF multiframe com códigos de barras em diferentes quadros

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");
}
$vbLabelText   $csharpLabel

O mesmo BarcodeReaderOptions se aplica ao processamento de TIFF, incluindo filtros de imagem e configurações de rotação. Para cenários detalhados de manipulação de TIFF, veja nossos tutoriais de processamento de imagem.

Posso acelerar o processamento com multithreading?

O processamento de múltiplos documentos beneficia dramaticamente do processamento paralelo. O IronBarcode utiliza automaticamente os núcleos de CPU disponíveis para desempenho ótimo.

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}");
    }
}
$vbLabelText   $csharpLabel

Essa abordagem paralela processa documentos simultaneamente, reduzindo o tempo total de escaneamento em até 75% em sistemas multicore. Para processamento de códigos de barras em escala empresarial, explore nosso guia de otimização de desempenho.

Resumo

O IronBarcode transforma escaneamentos de códigos de barras complexos em código C# simples. Seja você desenvolvendo sistemas de inventário, processadores de documentos ou aplicativos móveis, a biblioteca lida com tudo, desde códigos de barras digitais impecáveis até capturas desafiadoras do mundo real.

Capacidades-chave cobertas:

  • Leitura de código de barras em linha única de imagens
  • Opções avançadas para códigos de barras danificados ou rotacionados
  • Digitalização abrangente de documentos PDF e TIFF
  • Processamento em lote de alto desempenho com multithreading
  • Suporte para todos os principais formatos de código de barras

Leitura complementar

Expanda suas capacidades de processamento de código de barras com estes recursos:

Downloads de Código Fonte

Execute estes exemplos você mesmo:

Pronto para implementar a leitura de códigos de barras em seu aplicativo? Comece seu teste gratuito e adicione leitura de códigos de barras profissional ao seu projeto .NET hoje.

!{--0100110001001001010000100101001001000001010100100101100101011111010001110100010101010100010111110101001101010100010000010101001001010100010001010100010001011111010101110100100101010100010010000101111101010000010 100100100111101000100010101010100001101010100010111110101010001010010010010010100000101001100010111110100010101011000010101000100010101001110010001000100010101000100010111110100001001001100010011110100001101001011--}

Perguntas frequentes

Como posso instalar uma biblioteca de leitura de código de barras em um projeto .NET?

Você pode instalar a biblioteca IronBarcode através do Gerenciador de Pacotes NuGet usando o comando dotnet add package BarCode ou através da interface NuGet do Visual Studio. Como alternativa, baixe o arquivo DLL para instalação manual.

Qual é o método para ler um código de barras a partir de uma imagem usando C#?

Utilize o método BarcodeReader.Read do IronBarcode com uma única linha de código: var results = BarcodeReader.Read('image.png'); Este método detecta e lê todos os formatos de código de barras presentes na imagem.

É possível detectar vários códigos de barras em uma única imagem ou documento?

Sim, o IronBarcode pode detectar e ler automaticamente vários códigos de barras em uma imagem, PDF ou TIFF multiframe, retornando o valor, o tipo e a posição de cada código de barras em uma coleção BarcodeResults .

Como faço para ler códigos de barras de um PDF usando C#?

Utilize o método BarcodeReader.ReadPdf do IronBarcode para escanear todas as páginas de um documento PDF: var results = BarcodeReader.ReadPdf('document.pdf'); Cada resultado inclui o número da página onde o código de barras foi encontrado.

O que devo fazer se as imagens dos códigos de barras estiverem desfocadas ou rotacionadas?

Configure BarcodeReaderOptions para lidar com imagens complexas definindo AutoRotate = true e aplicando filtros de imagem como SharpenFilter ou AdaptiveThresholdFilter . Use Speed = ExtremeDetail para obter maior precisão.

Quais formatos de código de barras são suportados em aplicativos .NET?

O IronBarcode é compatível com todos os principais formatos de código de barras, como QR Code, Code 128, Code 39, EAN-13, UPC-A, Data Matrix, PDF417 e muitos outros. Utilize BarcodeEncoding.All para digitalizar qualquer formato compatível.

Como posso melhorar o desempenho da leitura de código de barras em um aplicativo C#?

Melhore o desempenho especificando os tipos de código de barras esperados com ExpectBarcodeTypes , habilitando o processamento multithread e escolhendo as configurações Speed apropriadas. Para tarefas em lote, utilize BarcodeReader.Read com caminhos de arquivo.

Qual é a abordagem recomendada para lidar com erros de leitura de código de barras?

Encapsule a leitura do código de barras em blocos try-catch e verifique se os resultados são nulos ou vazios. O IronBarcode fornece mensagens de erro detalhadas e uma propriedade de Confiança para indicar a confiabilidade da detecção.

Posso extrair imagens de códigos de barras depois de serem digitalizadas?

Sim, BarcodeResult do IronBarcode inclui uma propriedade BarcodeImage que contém um Bitmap do código de barras detectado, o qual pode ser salvo ou processado separadamente.

Como faço para ler códigos de barras em páginas específicas de um documento PDF?

Defina a propriedade PageNumbers em BarcodeReaderOptions para especificar as páginas: options.PageNumbers = new[] {1, 2, 3}; Isso otimiza o desempenho, escaneando apenas as páginas designadas.

Quais formatos de imagem são compatíveis com a leitura de código de barras no .NET?

O IronBarcode suporta a digitalização em formatos como PNG, JPEG, BMP, GIF, TIFF (incluindo multiframe) e PDF. Você pode carregar imagens a partir de caminhos de arquivo, fluxos ou matrizes de bytes.

Como posso acessar dados binários de códigos de barras escaneados em C#?

Utilize a propriedade BinaryValue de BarcodeResult para obter dados binários brutos, especialmente útil para códigos de barras que contêm dados não textuais, como informações compactadas ou protocolos binários.

Jacob Mellor, Diretor de Tecnologia da Team Iron
Diretor de Tecnologia

Jacob Mellor é Diretor de Tecnologia da Iron Software e um engenheiro visionário pioneiro na tecnologia C# PDF. Como desenvolvedor original do código-fonte principal da Iron Software, ele moldou a arquitetura de produtos da empresa desde sua criação, transformando-a, juntamente com o CEO Cameron Rimington, em uma ...

Leia mais
Pronto para começar?
Nuget Downloads 2,108,094 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package BarCode
executar um exemplo Veja seu fio se transformar em um código de barras.