Cómo Leer Códigos de Barras Desde Objetos del Sistema de Dibujo

Cómo leer códigos de barras de System.Drawing en C

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

IronBarcode permite leer códigos de barras a partir de objetos System.Drawing en todos los sistemas operativos convirtiéndolos automáticamente en AnyBitmap a través de IronDrawing, lo que soluciona la limitación de Microsoft de solo Windows para la compatibilidad con System.Drawing.

Introducción

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

los objetos System.Drawing se utilizan ampliamente en .NET para tareas de procesamiento de imágenes. Sin embargo, Microsoft ha discontinuado el soporte para System.Drawing en MacOS y Linux, soportando ahora exclusivamente Windows. Este cambio ha planteado problemas a los desarrolladores que utilizan IronBarcode en sistemas operativos distintos de Windows, ya que el trabajo con códigos de barras suele implicar gráficos, imágenes y tipos de letra.

Para solucionar este problema, presentamos IronDrawing. Esta biblioteca gratuita y de código abierto, creada por IronSoftware, simplifica la compatibilidad entre plataformas y proporciona una experiencia fluida. Al instalar IronBarcode desde NuGet, IronDrawing se incluye automáticamente en su proyecto.

Para los desarrolladores que no estén familiarizados con la lectura de códigos de barras, consulte nuestro completo Tutorial de lectura de códigos de barras, que cubre los conceptos fundamentales y los patrones de uso básicos. Si trabaja con varios formatos de imagen, nuestra guía sobre lectura de códigos de barras a partir de imágenes proporciona contexto y ejemplos adicionales.

Inicio rápido: leer un código de barras con AnyBitmap en una sola línea

Este fragmento muestra cómo IronBarcode lee códigos de barras creando un System.Drawing.Bitmap y dejando que IronDrawing lo convierta implícitamente en AnyBitmap. Con una sola línea, los desarrolladores de cualquier sistema operativo obtienen resultados rápidos.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronBarcode con el gestor de paquetes NuGet

    PM > Install-Package BarCode

  2. Copie y ejecute este fragmento de código.

    var results = IronBarCode.BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronBarcode en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer

¿Cómo convierto objetos System.Drawing en AnyBitmap?

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

Para leer códigos de barras de System.Drawing es necesario convertir el objeto en AnyBitmap. IronDrawing se diseñó para facilitar su uso y admite la conversión implícita de objetos de imagen de System.Drawing en objetos de imagen de IronSoftware.Drawing denominados AnyBitmap.

Además de los objetos System.Drawing, admitimos la conversión de otros tipos:

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

Consulte este ejemplo de código para convertir los objetos anteriores. A continuación se muestra la conversión de imágenes de códigos de barras de objetos System.Drawing a IronSoftware.Drawing.AnyBitmap:

¿Qué tipos System.Drawing se pueden fundir?

: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 demuestra la perfecta integración entre los objetos System.Drawing y IronBarcode a través de IronDrawing. Esta compatibilidad se extiende a varios formatos de códigos de barras, detallados en nuestra guía de formatos de códigos de barras compatibles, incluidos los códigos QR, Code 128, Code 39 y muchos otros.

¿Por qué funciona el colado implícito?

En el código anterior, cargamos dos imágenes de código de barras como System.Drawing.Bitmap y System.Drawing.Image. A continuación, los convertimos implícitamente en AnyBitmap asignándolos a objetos AnyBitmap, y luego añadimos estos objetos a una lista AnyBitmap.

el mecanismo de casting implícito de IronDrawing utiliza la sobrecarga de operadores, proporcionando una conversión transparente entre los tipos System.Drawing y AnyBitmap. Este patrón de diseño permite a los desarrolladores mantener el código existente al tiempo que obtienen compatibilidad entre plataformas. La conversión conserva todas las propiedades de la imagen, incluida la resolución, la profundidad de color y los datos de píxeles, lo que garantiza que no se pierda calidad.

¿Cuándo se debe utilizar el casting explícito frente al implícito?

Aunque la conversión implícita resulta práctica, en algunos casos puede ser preferible la conversión explícita:

// 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
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

¿Cuáles son los errores de fundición más comunes?

Al convertir System.Drawing a AnyBitmap, los desarrolladores pueden encontrarse con:

  1. Excepciones de referencia nula: Compruebe que su objeto System.Drawing no es nulo antes de realizar el casting
  2. Excepciones de formatos no compatibles: Algunos formatos de imagen exóticos requieren una conversión previa
  3. Cuestiones de memoria: Las imágenes de gran tamaño necesitan patrones de eliminación adecuados

Para solucionar problemas de fundición, nuestra guía de solución de problemas ofrece soluciones a problemas comunes durante el reconocimiento de códigos de barras.

¿Cómo leer códigos de barras de objetos AnyBitmap?

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

IronBarcode acepta objetos IronSoftware.Drawing.AnyBitmap en todos los métodos sin configuración adicional. Esto simplifica el desarrollo cuando se utilizan objetos System.Drawing en sistemas operativos distintos de Windows. El siguiente código demuestra esto:

¿Qué métodos aceptan 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;

List<AnyBitmap> barcodes = new List<AnyBitmap>();

System.Drawing.Bitmap bitmapFromBitmap = new System.Drawing.Bitmap("test1.jpg");
AnyBitmap barcode1 = bitmapFromBitmap;
barcodes.Add(barcode1);

System.Drawing.Image bitmapFromFile = System.Drawing.Image.FromFile("test2.png");
AnyBitmap barcode2 = bitmapFromFile;
barcodes.Add(barcode2);

foreach (var barcode in barcodes)
{
    // Read the barcode
    var results = BarcodeReader.Read(barcode);
    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

Private barcodes As New List(Of AnyBitmap)()

Private bitmapFromBitmap As New System.Drawing.Bitmap("test1.jpg")
Private barcode1 As AnyBitmap = bitmapFromBitmap
barcodes.Add(barcode1)

Dim bitmapFromFile As System.Drawing.Image = System.Drawing.Image.FromFile("test2.png")
Dim barcode2 As AnyBitmap = bitmapFromFile
barcodes.Add(barcode2)

For Each barcode In barcodes
	' Read the barcode
	Dim results = BarcodeReader.Read(barcode)
	For Each result In results
		' Output the detected barcode value
		Console.WriteLine(result.Value)
	Next result
Next barcode
$vbLabelText   $csharpLabel

Además del método básico Read, IronBarcode proporciona varios métodos que aceptan parámetros AnyBitmap. Para escenarios avanzados, consulte nuestra guía sobre lectura de múltiples códigos de barras que demuestra el procesamiento eficiente de múltiples códigos de barras en una sola imagen:

// 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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

¿Cómo manejar múltiples resultados de códigos de barras?

El código anterior amplía el ejemplo anterior. Después de rellenar la lista AnyBitmap, la recorremos y llamamos al método Read de cada objeto AnyBitmap, que devuelve IronBarcode.BarcodeResults. A continuación, iteramos sobre los resultados para imprimir los valores de los códigos de barras en la consola.

Al gestionar varios códigos de barras, aproveche el procesamiento en paralelo para mejorar el rendimiento:

// 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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

¿Qué otras funciones de IronDrawing puedo utilizar?

la funcionalidad de IronSoftware.Drawing va más allá de la creación de imágenes. Maneja aspectos de procesamiento de imágenes como colores y fuentes útiles para estilizar códigos de barras y códigos QR. Explore cómo utilizamos IronDrawing para personalizar y añadir logotipos a códigos QR.

IronDrawing ofrece potentes funciones de manipulación de imágenes que complementan el procesamiento 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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para situaciones que requieran correcciones de imagen específicas, nuestra guía de corrección de imágenes detalla el uso de filtros para mejorar la legibilidad de los códigos de barras.

¿Por qué elegir IronDrawing en lugar de System.Drawing?

IronDrawing ofrece ventajas convincentes sobre System.Drawing:

  1. Soporte multiplataforma: Funciona sin problemas en Windows, Linux y macOS a diferencia de System.Drawing (solo para Windows en .NET Core/5+)
  2. Arquitectura moderna: Construida sobre SkiaSharp e ImageSharp para un mejor rendimiento y gestión de memoria
  3. API simplificada: Mantiene las interfaces familiares System.Drawing a la vez que añade comodidades modernas
  4. Desarrollo activo: Actualizaciones y mejoras regulares, a diferencia de System.Drawing en modo de mantenimiento
  5. Mejor integración: Diseñado específicamente para un rendimiento óptimo con los productos IronSoftware

Para consideraciones de despliegue, especialmente para entornos en la nube, consulte nuestras guías sobre despliegue en Azure y despliegue en AWS, que incluyen notas específicas sobre compatibilidad entre plataformas utilizando IronDrawing.

Ya sea para crear aplicaciones de escritorio, servicios web o soluciones nativas en la nube, IronDrawing garantiza que su código de procesamiento de códigos de barras siga siendo portátil y eficiente en todas las plataformas, lo que lo convierte en la opción ideal para el desarrollo .NET moderno.

Preguntas Frecuentes

¿Cómo puedo leer códigos de barras a partir de objetos System.Drawing en plataformas distintas de Windows?

IronBarcode gestiona automáticamente la lectura de códigos de barras multiplataforma a partir de objetos System.Drawing mediante IronDrawing, que los convierte al formato AnyBitmap. Esto resuelve la limitación de Microsoft de que System.Drawing sea exclusivo de Windows, permitiéndole leer códigos de barras en sistemas MacOS y Linux sin problemas.

¿Qué es IronDrawing y por qué se incluye con la lectura de códigos de barras?

IronDrawing es una biblioteca gratuita de código abierto creada por IronSoftware que proporciona soporte multiplataforma para operaciones gráficas. Se incluye automáticamente al instalar IronBarcode desde NuGet y permite la lectura de códigos de barras a partir de objetos System.Drawing en todos los sistemas operativos convirtiéndolos al formato compatible AnyBitmap.

¿Cómo convierto un System.Drawing.Bitmap para leer códigos de barras de él?

Puede leer códigos de barras de System.Drawing.Bitmap con una simple conversión a AnyBitmap: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. IronBarcode maneja la conversión automáticamente a través de la función de fundición implícita de IronDrawing.

¿Puedo leer códigos de barras en Linux y MacOS utilizando System.Drawing?

Sí, IronBarcode permite la lectura de códigos de barras a partir de objetos System.Drawing en Linux y MacOS a través de IronDrawing, que convierte automáticamente los objetos System.Drawing al formato multiplataforma AnyBitmap. De este modo se supera la limitación de Microsoft de admitir sólo Windows para System.Drawing.

¿Qué tipos de objetos System.Drawing pueden utilizarse para la lectura de códigos de barras?

IronBarcode soporta la lectura de códigos de barras desde varios objetos System.Drawing incluyendo System.Drawing.Bitmap y otros tipos de imágenes. Estos se convierten automáticamente a AnyBitmap a través de la función de fundición implícita de IronDrawing, lo que permite la funcionalidad de lectura de códigos de barras multiplataforma.

¿Existe una solución sencilla de una sola línea para leer códigos de barras desde System.Drawing?

Sí, IronBarcode proporciona una solución de una sola línea: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. Esta única línea crea un System.Drawing.Bitmap, lo convierte en AnyBitmap a través de IronDrawing, y lee todos los códigos de barras presentes en la imagen.

Hairil Hasyimi Bin Omar
Ingeniero de Software
Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está refinando su conocimiento de C#, Python y Java, usando ese conocimiento para agregar valor a los miembros del equipo en Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA en Malasia, donde se ...
Leer más
¿Listo para empezar?
Nuget Descargas 2,002,059 | Versión: 2025.12 recién lanzado