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

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

Introdução

Objetos System.Drawing são amplamente utilizados em .NET para tarefas de processamento de imagens. No entanto, a Microsoft descontinuou o suporte para System.Drawing no MacOS e Linux, agora suportando exclusivamente o 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 de código aberto, criada pela IronSoftware, simplifica o suporte multiplataforma e proporciona uma experiência tranquila. Quando você instala o IronBarcode a partir do NuGet, IronDrawing é automaticamente incluído em 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 linha fácil

Este trecho mostra como o IronBarcode lê códigos de barras criando um System.Drawing.Bitmap e permitindo que o IronDrawing o converta implicitamente em 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 Fazer a Conversão de Objetos System.Drawing para AnyBitmap?

A leitura de códigos de barras a partir de System.Drawing requer a conversão do objeto para AnyBitmap. IronDrawing foi projetado para ser fácil de usar e suporta a conversão implícita de objetos de imagem de System.Drawing em objetos de imagem IronSoftware.Drawing chamados AnyBitmap.

Além dos objetos System.Drawing, suportamos a 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. Abaixo, demonstra-se a conversão de imagens de código de barras de objetos System.Drawing em 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);
$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, as convertemos implicitamente em AnyBitmap ao atribuí-las a objetos AnyBitmap, depois adicionamos esses objetos a uma lista AnyBitmap.

O mecanismo de conversão implícita do IronDrawing usa sobrecarga de operador, proporcionando conversão transparente entre tipos 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
}
$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 seu objeto System.Drawing não é nulo antes de converter
  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 Ler Códigos de Barras de Objetos AnyBitmap?

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

Quais Outras Funcionalidades IronDrawing Posso Usar?

A funcionalidade IronSoftware.Drawing se estende além da conversã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. Explore como utilizamos IronDrawing para personalizar e adicionar logotipos a códigos QR.

IronDrawing fornece poderosas capacidades de manipulação de imagem 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);
$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 ao Invés de System.Drawing?

IronDrawing oferece vantagens convincentes sobre System.Drawing:

  1. Suporte Multiplataforma: Funciona perfeitamente no Windows, Linux e macOS ao contrário de System.Drawing (exclusivo para Windows no .NET Core/5+)
  2. Arquitetura Moderna: Construído sobre SkiaSharp e ImageSharp para melhor desempenho e gestão de memória
  3. API Simplificada: Mantém interfaces familiares ao System.Drawing enquanto adiciona conveniências modernas
  4. Desenvolvimento Ativo: Atualizações e melhorias regulares, ao contrário de 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 no AWS, que incluem notas específicas sobre compatibilidade multiplataforma usando IronDrawing.

Seja construindo aplicativos desktop, serviços web ou soluções nativas em nuvem, 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 moderno em .NET.

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.

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,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.