Como ler códigos de barras em objetos de desenho do sistema

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

O IronBarcode permite a leitura de códigos de barras de objetos System.Drawing em todos os sistemas operacionais, convertendo-os automaticamente para AnyBitmap até IronDrawing, resolvendo a limitação da Microsoft de suporte exclusivo ao Windows para System.Drawing.

Introdução

Os objetos System.Drawing são amplamente utilizados no .NET para tarefas de processamento de imagens. No entanto, a Microsoft descontinuou o suporte para System.Drawing no MacOS e Linux , agora oferecendo suporte exclusivamente ao Windows . Esta mudança criou problemas para desenvolvedores que usam IronBarcode em sistemas operacionais diferentes do Windows, já que trabalhar com códigos de barras normalmente envolve gráficos, imagens e fontes.

Para resolver este problema, introduzimos o IronDrawing. Esta biblioteca gratuita e open-source, criada pela Iron Software, simplifica o suporte multiplataforma e oferece uma experiência perfeita. Ao instalar o IronBarcode a partir do NuGet, o código IronDrawing é automaticamente incluído no seu projeto.

Para desenvolvedores novos na leitura de códigos de barras, veja nosso abrangente Tutorial de Leitura de Códigos de Barras que cobre conceitos fundamentais e padrões básicos de uso. Se você estiver trabalhando com vários formatos de imagem, nosso guia sobre ler códigos de barras a partir de imagens fornece contexto e exemplos adicionais.

Início rápido: Leia um código de barras usando AnyBitmap em uma única linha

Este trecho mostra como o IronBarcode lê códigos de barras criando um System.Drawing.Bitmap e permitindo que IronDrawing o converta implicitamente para AnyBitmap. Com apenas uma linha, os desenvolvedores em qualquer sistema operacional obtêm resultados rápidos.

  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((AnyBitmap)(new System.Drawing.Bitmap("yourImage.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 faço para converter objetos System.Drawing em AnyBitmap?

A leitura de códigos de barras de System.Drawing requer a conversão do objeto para AnyBitmap. IronDrawing foi projetado para facilitar o uso e suporta conversão implícita de objetos de imagem de System.Drawing para objetos de imagem IronSoftware.Drawing chamados AnyBitmap.

Além de objetos System.Drawing, oferecemos suporte à conversão de outros tipos:

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

Veja este exemplo de código para converter os objetos acima. A seguir, demonstra-se a conversão de imagens de código de barras de objetos System.Drawing em objetos IronSoftware.Drawing.AnyBitmap:

Quais tipos System.Drawing podem ser convertidos?

: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

Este código demonstra a integração perfeita entre objetos System.Drawing e IronBarcode através de IronDrawing. Esta compatibilidade se estende por vários formatos de código de barras, detalhados em nosso guia de formatos de código de barras suportados, incluindo códigos QR, Code 128, Code 39 e muitos outros.

Por que o Casting Implícito Funciona?

No código acima, carregamos duas imagens de código de barras como System.Drawing.Bitmap e System.Drawing.Image. Em seguida, convertemos implicitamente esses objetos em AnyBitmap atribuindo-os a objetos AnyBitmap e, em seguida, adicionamos esses objetos a uma lista AnyBitmap.

O mecanismo de conversão implícita de IronDrawing usa sobrecarga de operadores, fornecendo conversão transparente entre os tipos de System.Drawing e AnyBitmap. Este padrão de design permite que os desenvolvedores mantenham o código existente enquanto ganham compatibilidade entre plataformas. A conversão preserva todas as propriedades da imagem, incluindo resolução, profundidade de cor e dados de pixel, garantindo a ausência de perda de qualidade.

Quando Devo Usar Casting Implícito versus Explícito?

Embora o casting implícito proporcione conveniência, o casting explícito pode ser preferido em alguns cenários:

// 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

Quais São os Erros Comuns de Casting?

Ao converter System.Drawing para AnyBitmap, os desenvolvedores podem encontrar:

  1. Exceções de Referência Nula : Verifique se o seu objeto System.Drawing não é nulo antes de fazer a conversão.
  2. Exceções de Formato Não Suportado: Alguns formatos de imagem exóticos requerem pré-conversão
  3. Problemas de Memória: Imagens grandes precisam de padrões de descarte adequados

Para solucionar problemas de casting, nosso guia de solução de problemas fornece soluções para problemas comuns durante o reconhecimento de código de barras.

Como faço para ler códigos de barras de objetos AnyBitmap?

IronBarcode aceita objetos IronSoftware.Drawing.AnyBitmap em todos os métodos sem configuração adicional. Isso simplifica o desenvolvimento ao usar objetos System.Drawing em sistemas operacionais que não sejam Windows. O código a seguir demonstra isso:

Quais métodos aceitam parâmetros 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

Além do método básico Read, o IronBarcode fornece vários métodos que aceitam parâmetros AnyBitmap. Para cenários avançados, consulte nosso guia sobre leitura de múltiplos códigos de barras demonstrando o processamento eficiente de múltiplos códigos de barras em uma única imagem:

// 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);
' 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

Como Lidar com Resultados Múltiplos de Código de Barras?

O código acima estende o exemplo anterior. Após preencher a lista AnyBitmap, iteramos por ela e chamamos o método Read em cada objeto AnyBitmap, que retornou IronBarCode.BarcodeResults . Em seguida, iteramos pelos resultados para imprimir os valores dos códigos de barras no console.

Ao lidar com múltiplos códigos de barras, utilize processamento paralelo para melhor desempenho:

// 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

Que outras funcionalidades do IronDrawing posso usar?

A funcionalidade IronSoftware.Drawing vai além da projeção de imagens. Ela lida com aspectos de processamento de imagem como cores e fontes, úteis para estilizar códigos de barras e códigos QR. Descubra como utilizamos IronDrawing para personalizar e adicionar logotipos a códigos QR .

O IronDrawing oferece recursos avançados de manipulação de imagens que complementam o processamento de códigos de barras:

// 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);
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

Para cenários que requerem correções específicas de imagem, nosso guia de correção de imagem detalha o uso de filtros para melhorar a legibilidade do código de barras.

Por que escolher IronDrawing em vez de System.Drawing?

IronDrawing oferece vantagens convincentes em relação a System.Drawing:

  1. Suporte multiplataforma : Funciona perfeitamente no Windows, Linux e macOS, ao contrário de System.Drawing (somente Windows no .NET Core/5+)
  2. Arquitetura Moderna : Construída sobre SkiaSharp e ImageSharp para melhor desempenho e gerenciamento de memória.
  3. API simplificada : Mantém interfaces familiares semelhantes ao System.Drawing, ao mesmo tempo que adiciona conveniências modernas.
  4. Desenvolvimento Ativo : Atualizações e melhorias regulares, ao contrário do System.Drawing em modo de manutenção.
  5. Melhor Integração: Projetado especificamente para desempenho ótimo com produtos Iron Software

Para considerações de implantação, especialmente para ambientes de nuvem, consulte nossos guias sobre implantação no Azure e implantação na AWS , que incluem notas específicas sobre compatibilidade entre plataformas usando IronDrawing.

Seja para criar aplicativos de desktop, serviços web ou soluções nativas da nuvem, o IronDrawing garante que seu código de processamento de código de barras permaneça portátil e eficiente em todas as plataformas, tornando-o a escolha ideal para o desenvolvimento .NET moderno.

Perguntas frequentes

Como posso ler códigos de barras de objetos System.Drawing em plataformas que não sejam Windows?

O IronBarcode lida automaticamente com a leitura de códigos de barras multiplataforma a partir de objetos System.Drawing por meio do IronDrawing, que os converte para o formato AnyBitmap. Isso resolve a limitação da Microsoft de o System.Drawing ser exclusivo do Windows, permitindo que você leia códigos de barras em sistemas macOS e Linux sem problemas.

O que é IronDrawing e por que está incluído na leitura de código de barras?

IronDrawing é uma biblioteca gratuita e de código aberto criada pela Iron Software que oferece suporte multiplataforma para operações gráficas. Ela é incluída automaticamente ao instalar o IronBarcode pelo NuGet e permite a leitura de códigos de barras de objetos System.Drawing em todos os sistemas operacionais, convertendo-os para o formato AnyBitmap compatível.

Como faço para converter um System.Drawing.Bitmap para que ele possa ler códigos de barras?

Você pode ler códigos de barras de System.Drawing.Bitmap com uma simples conversão para AnyBitmap: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. O IronBarcode lida com a conversão automaticamente por meio do recurso de conversão implícita do IronDrawing.

Posso ler códigos de barras no Linux e no MacOS usando System.Drawing?

Sim, o IronBarcode permite a leitura de códigos de barras de objetos System.Drawing no Linux e no macOS por meio do IronDrawing, que converte automaticamente objetos System.Drawing para o formato multiplataforma AnyBitmap. Isso supera a limitação da Microsoft de suporte exclusivo ao Windows para System.Drawing.

Que tipos de objetos System.Drawing podem ser usados para leitura de código de barras?

O IronBarcode suporta a leitura de códigos de barras de vários objetos System.Drawing, incluindo System.Drawing.Bitmap e outros tipos de imagem. Estes são convertidos automaticamente para AnyBitmap através do recurso de conversão implícita do IronDrawing, permitindo a funcionalidade de leitura de códigos de barras em várias plataformas.

Existe alguma solução simples, em uma única linha de código, para ler códigos de barras de um objeto System.Drawing?

Sim, o IronBarcode oferece uma solução de uma linha: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. Essa única linha cria um System.Drawing.Bitmap, converte-o para AnyBitmap através do IronDrawing e lê todos os códigos de barras presentes na imagem.

IronBarcode oferece suporte para customização de aparência do código de barras?

Sim, IronBarcode oferece amplas opções de personalização para a aparência do código de barras, incluindo cor, tamanho e anotações de texto, permitindo que você adapte os códigos de barras às suas necessidades específicas de design.

Como o IronBarcode pode ajudar a melhorar a eficiência nos processos de negócios?

IronBarcode melhora a eficiência dos processos de negócios ao permitir a geração e leitura rápida e precisa de códigos de barras, reduzindo erros de entrada de dados manuais e melhorando o rastreamento de inventário e ativos.

Quais habilidades de programação são necessárias para implementar o IronBarcode em um projeto?

Conhecimento básico de programação C# é suficiente para implementar o IronBarcode em um projeto, pois ele fornece métodos diretos e documentação abrangente para guiar os desenvolvedores.

IronBarcode é adequado tanto para projetos pequenos quanto para grandes aplicações empresariais?

IronBarcode foi projetado para ser escalável e versátil, tornando-o adequado tanto para projetos pequenos quanto para grandes aplicações empresariais que exigem soluções robustas de código de barras.

Hairil Hashimi Bin Omar
Engenheiro de Software
Como todo grande engenheiro, Hairil é um ávido aprendiz. Ele está aprimorando seus conhecimentos em C#, Python e Java, usando esse conhecimento para agregar valor aos membros da equipe da Iron Software. Hairil ingressou na equipe da Iron Software vindo da Universiti Teknologi MARA, na Malásia, onde se formou em ...
Leia mais
Pronto para começar?
Nuget Downloads 2,240,258 | Versão: 2026.5 just released
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.