How to Read Barcodes From System.Drawing in C
IronBarcode permite leer códigos de barras de objetos System.Drawing en todos los sistemas operativos al convertirlos automáticamente a AnyBitmap a través de IronDrawing, resolviendo la limitación única de Windows de Microsoft para el soporte de System.Drawing.
Introducción
Los objetos System.Drawing son ampliamente utilizados en .NET para tareas de procesamiento de imágenes. Sin embargo, Microsoft ha descontinuado el soporte para System.Drawing en MacOS y Linux, ahora apoyando exclusivamente a 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 Iron Software, simplifica el soporte multiplataforma y proporciona una experiencia sin interrupciones. Cuando instalas IronBarcode desde NuGet, IronDrawing se incluye automáticamente en tu 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 usando AnyBitmap en una línea fácil
Este fragmento muestra cómo IronBarcode lee códigos de barras creando un System.Drawing.Bitmap y permitiendo que IronDrawing lo transforme implícitamente a AnyBitmap. Con una sola línea, los desarrolladores de cualquier sistema operativo obtienen resultados rápidos.
-
Instala IronBarcode con el Administrador de Paquetes NuGet
PM > Install-Package BarCode -
Copie y ejecute este fragmento de código.
var results = IronBarCode.BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png"))); -
Despliegue para probar en su entorno real
Comienza a usar IronBarcode en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (5 pasos)
- Descargue la biblioteca C# para leer códigos de barras desde
System.Drawing - Utilice
IronDrawingpara convertir objetosSystem.DrawingenAnyBitmap - Utilice el método
Readpara leer códigos de barras de objetosAnyBitmap - Muestre los valores de los códigos de barras detectados en la consola
- Explora otro artículo para aprender cómo se utiliza
IronDrawingpara manejar el color y las fuentes
¿Cómo convierto objetos System.Drawing a AnyBitmap?
Leer códigos de barras de System.Drawing requiere transformar el objeto a AnyBitmap. IronDrawing fue diseñado para facilidad de uso y soporta la conversión implícita para objetos de imagen de System.Drawing en objetos de imágenes IronSoftware.Drawing llamados AnyBitmap.
Más allá de los objetos System.Drawing, soportamos la conversión desde otros tipos:
System.Drawing.BitmapSystem.Drawing.ImageSkiaSharp.SKBitmapSkiaSharp.SKImageSixLabors.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 desde objetos System.Drawing a IronSoftware.Drawing.AnyBitmap:
¿Cuáles tipos de System.Drawing pueden 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)
Este código demuestra la integración perfecta entre 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ódigos de barras como System.Drawing.Bitmap y System.Drawing.Image. Luego, los transformamos implícitamente a AnyBitmap asignándolos a objetos AnyBitmap, luego agregamos estos objetos a una lista AnyBitmap.
El mecanismo de conversión implícita de IronDrawing utiliza sobrecarga de operadores, proporcionando una conversión transparente entre tipos de 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
}
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
¿Cuáles son los errores de fundición más comunes?
Al convertir System.Drawing a AnyBitmap, los desarrolladores podrían encontrarse con:
- Excepciones de referencia nula: Verifica que tu objeto
System.Drawingno sea nulo antes de convertir - Excepciones de formatos no compatibles: Algunos formatos de imagen exóticos requieren una conversión previa
- 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 leo códigos de barras de objetos AnyBitmap?
IronBarcode acepta objetos IronSoftware.Drawing.AnyBitmap en todos los métodos sin configuración adicional. Esto simplifica el desarrollo cuando se usan objetos de System.Drawing en sistemas operativos que no son 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;
// 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
Más allá 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);
' 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)
¿Cómo manejar múltiples resultados de códigos de barras?
El código anterior amplía el ejemplo anterior. Después de completar la lista AnyBitmap, iteramos sobre ella y llamamos al método Read en cada objeto AnyBitmap, que devolvió 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}");
}
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
¿Qué otras características de IronDrawing puedo usar?
La funcionalidad de IronSoftware.Drawing se extiende más allá de la conversió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. Explora cómo utilizamos IronDrawing para personalizar y añadir logotipos a los códigos QR.
IronDrawing proporciona potentes capacidades 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);
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)
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 sobre System.Drawing?
IronDrawing ofrece ventajas convincentes sobre System.Drawing:
- Soporte multiplataforma: Funciona sin problemas en Windows, Linux y macOS a diferencia de
System.Drawing(solo Windows en .NET Core/5+) - Arquitectura moderna: Construido sobre
SkiaSharpyImageSharppara un mejor rendimiento y gestión de memoria - API simplificada: Mantiene interfaces similares a
System.Drawingañadiendo comodidades modernas - Desarrollo activo: Actualizaciones y mejoras regulares, a diferencia de
System.Drawingque está en modo de mantenimiento - Mejor integración: Diseñado específicamente para un rendimiento óptimo con los productos de Iron Software
Para consideraciones de implementación, especialmente para entornos en la nube, consulta nuestras guías sobre implementación en Azure e implementación en AWS que incluyen notas específicas sobre la compatibilidad multiplataforma utilizando IronDrawing.
Ya sea creando aplicaciones de escritorio, servicios web o soluciones nativas de la nube, IronDrawing asegura que tu código de procesamiento de códigos de barras permanezca portátil y eficiente en todas las plataformas, convirtiéndose en la elección ideal para el desarrollo moderno en .NET.
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 Iron Software 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.
¿IronBarcode proporciona soporte para personalizar la apariencia de los códigos de barras?
Sí, IronBarcode proporciona amplias opciones de personalización para la apariencia de los códigos de barras, incluidas color, tamaño y anotaciones de texto, permitiéndote adaptar los códigos de barras a tus requisitos de diseño específicos.
¿Cómo puede IronBarcode ayudar a mejorar la eficiencia de los procesos de negocio?
IronBarcode mejora la eficiencia de los procesos de negocio al permitir la generación y lectura rápida y precisa de códigos de barras, reduciendo errores de entrada de datos manuales y mejorando el seguimiento de inventario y activos.
¿Qué habilidades de programación se necesitan para implementar IronBarcode en un proyecto?
El conocimiento básico de programación en C# es suficiente para implementar IronBarcode en un proyecto, ya que proporciona métodos sencillos y documentación completa para guiar a los desarrolladores.
¿Es IronBarcode adecuado para tanto proyectos pequeños como aplicaciones empresariales grandes?
IronBarcode está diseñado para ser escalable y versátil, haciéndolo adecuado para proyectos pequeños, así como para aplicaciones empresariales grandes que requieren soluciones robustas de códigos de barras.

