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

Hairil Hasyimi Bin Omar
Hairil Hasyimi Bin Omar
13 de septiembre, 2023
Actualizado 10 de diciembre, 2024
Compartir:
This article was translated from English: Does it need improvement?
Translated
View the article in English

Los objetos System.Drawing son ampliamente utilizados en .NET para tareas relacionadas con el procesamiento de imágenes por parte de los desarrolladores. Sin embargo, Microsoft ha descontinuado el soporte para System.Drawing en otros sistemas operativos, como MacOS y Linux, y ahora apoya exclusivamente Windows. Este importante cambio ha causado múltiples problemas a los desarrolladores que utilizan IronBarcode en sistemas operativos distintos de Windows. Esto se debe a que trabajar con códigos de barras típicamente implica usar objetos como gráficos, imágenes y fuentes.

Para abordar este problema, hemos introducido una solución alternativa: IronDrawing. Esta biblioteca gratuita y de código abierto, iniciada por IronSoftware, tiene como objetivo simplificar el proceso de hacerla funcionar en sistemas operativos distintos de Windows. Esto proporciona una experiencia fácil de usar para nuestros usuarios. Una vez que instale IronBarcode desde NuGet, IronDrawing se incluirá automáticamente en su proyecto.

Empezar a utilizar IronBarcode

Comience a usar IronBarcode en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer


Convertir System.Drawing en AnyBitmap

Leer códigos de barras desde System.Drawing simplemente implica convertir el objeto a AnyBitmap. IronDrawing se diseñó pensando en la facilidad de uso. Consecuentemente, IronDrawing admite la conversión implícita de objetos de imagen desde System.Drawing a objetos de imagen de IronSoftware.Drawing llamados AnyBitmap.

Además de los objetos System.Drawing, también soportamos el casting desde otros tipos de objetos, incluyendo:

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

    Los usuarios pueden consultar el ejemplo de código a continuación para convertir objetos mencionados anteriormente. A continuación se muestra un fragmento de código que demuestra cómo convertir imágenes de códigos de barras de objetos System.Drawing en IronSoftware.Drawing.AnyBitmap.

: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

A partir del fragmento de 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 simplemente asignándolos a objetos AnyBitmap. Posteriormente, añadimos estos objetos a una lista AnyBitmap.

Leer códigos de barras de AnyBitmap

IronBarcode puede aceptar fácilmente objetos IronSoftware.Drawing.AnyBitmap en todos sus métodos sin requerir ninguna configuración adicional. Esto ofrece facilidad de uso a los desarrolladores que utilizan IronBarcode con System.Drawing objetos que no son compatibles con sistemas operativos que no sean Windows. El siguiente fragmento de código muestra cómo hacerlo.

: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

El fragmento de código anterior es una extensión del anterior. Una vez que poblamos la lista AnyBitmap, iteramos a través de la lista y llamamos al método Read en cada objeto AnyBitmap como parámetro, lo cual luego devolvió IronBarcode.BarcodeResults. A continuación, iteramos sobre el objeto devuelto para imprimir el valor del código de barras en la consola.

El área de funcionalidad en IronSoftware.Drawing no se limita solo a la conversión de imágenes. También se utiliza mucho en otros aspectos del procesamiento de imágenes, como colores y fuentes que son útiles en el diseño de códigos de barras y códigos QR. Los usuarios pueden explorar cómo utilizamos IronDrawing para personalizar y añadir logos a los códigos QR.

Hairil Hasyimi Bin Omar
Ingeniero de software
Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está perfeccionando sus conocimientos de C#, Python y Java, y los utiliza para añadir valor a los miembros del equipo de Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA de Malasia, donde se licenció en Ingeniería Química y de Procesos.