Wie man Barcodes aus System Drawing-Objekten liest

Lesen von BarCodes aus System.Drawing in C

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

IronBarcode ermöglicht das Lesen von Barcodes aus System.Drawing-Objekten auf allen Betriebssystemen, indem es diese automatisch durch IronDrawing in AnyBitmap konvertiert und damit die Beschränkung von Microsoft auf Windows für System.Drawing-Unterstützung aufhebt.

Einführung

System.Drawing-Objekte werden in .NET häufig für Bildverarbeitungsaufgaben verwendet. Microsoft hat jedoch die Unterstützung für System.Drawing auf MacOS und Linux eingestellt und unterstützt nun ausschließlich Windows. Diese Änderung hat zu Problemen für Entwickler geführt, die IronBarcode auf Nicht-Windows-Betriebssystemen verwenden, da die Arbeit mit Barcodes typischerweise Grafiken, Bilder und Schriftarten beinhaltet.

Um dieses Problem zu lösen, haben wir IronDrawing eingeführt. Diese kostenlose und Open-Source-Bibliothek, die von IronSoftware entwickelt wurde, vereinfacht die Plattform-übergreifende Unterstützung und bietet eine nahtlose Erfahrung. Wenn Sie IronBarcode von NuGet installieren, wird IronDrawing automatisch in Ihr Projekt aufgenommen.

Für Entwickler, die noch nicht mit dem Lesen von Barcodes vertraut sind, gibt es ein umfassendes Tutorial zum Lesen von Barcodes, das die grundlegenden Konzepte und Verwendungsmuster behandelt. Wenn Sie mit verschiedenen Bildformaten arbeiten, bietet unser Leitfaden zum Lesen von Barcodes aus Bildern zusätzlichen Kontext und Beispiele.

Quickstart: Lesen eines Barcodes mit AnyBitmap in einer einfachen Zeile

Dieser Ausschnitt zeigt, wie IronBarcode Strichcodes liest, indem es eine System.Drawing.Bitmap erstellt und sie von IronDrawing implizit in AnyBitmap umwandelt. Mit nur einer Zeile erhalten Entwickler auf jedem Betriebssystem schnelle Ergebnisse.

Nuget IconLegen Sie jetzt mit NuGet los, um PDFs zu erstellen:

  1. Installieren Sie IronBarcode mit dem NuGet-Paketmanager.

    PM > Install-Package BarCode

  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    var results = IronBarCode.BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute mit der Nutzung von IronBarcode in Ihrem Projekt – mit einer kostenlosen Testversion.
    arrow pointer

Wie kann ich System.Drawing-Objekte in AnyBitmap umwandeln?

Das Lesen von Barcodes aus System.Drawing erfordert ein Casting des Objekts in AnyBitmap. IronDrawing wurde für eine einfache Handhabung entwickelt und unterstützt implizites Casting für Bildobjekte von System.Drawing in IronSoftware.Drawing Bildobjekte namens AnyBitmap.

Neben System.Drawing-Objekten unterstützen wir auch das Casting von anderen Typen:

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

Siehe dieses Codebeispiel für das Casting der oben genannten Objekte. Im Folgenden wird die Umwandlung von Barcode-Bildern aus System.Drawing-Objekten in IronSoftware.Drawing.AnyBitmap demonstriert:

Welche System.Drawing Typen können gecastet werden?

: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

Dieser Code demonstriert die nahtlose Integration zwischen System.Drawing-Objekten und IronBarcode durch IronDrawing. Diese Kompatibilität erstreckt sich auf verschiedene Barcodeformate, die in unserem Leitfaden unterstützte Barcodeformate aufgeführt sind, darunter QR-Codes, Code 128, Code 39 und viele andere.

Warum funktioniert Implicit Casting?

Im obigen Code haben wir zwei Barcode-Bilder als System.Drawing.Bitmap und System.Drawing.Image geladen. Wir haben sie dann implizit in AnyBitmap umgewandelt, indem wir sie AnyBitmap-Objekten zugewiesen haben, und diese Objekte dann zu einer AnyBitmap-Liste hinzugefügt.

der implizite Casting-Mechanismus von IronDrawing verwendet Operator-Überladung und bietet eine transparente Konvertierung zwischen System.Drawing-Typen und AnyBitmap. Dieses Designmuster ermöglicht es Entwicklern, bestehenden Code beizubehalten und gleichzeitig eine plattformübergreifende Kompatibilität zu erreichen. Bei der Konvertierung bleiben alle Bildeigenschaften wie Auflösung, Farbtiefe und Pixeldaten erhalten, sodass keine Qualitätsverluste entstehen.

Wann sollte ich Explicit vs. Implicit Casting verwenden?

Das implizite Casting ist zwar bequem, aber in manchen Szenarien ist das explizite Casting vorzuziehen:

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

Was sind häufige Besetzungsfehler?

Bei der Konvertierung von System.Drawing in AnyBitmap können Entwickler auf Folgendes stoßen:

  1. Nullreferenz-Ausnahmen: Vergewissern Sie sich vor dem Casting, dass Ihr System.Drawing-Objekt nicht null ist
  2. Unterstützte Formatausnahmen: Einige exotische Bildformate erfordern eine Vorkonvertierung
  3. Speicherproblem: Große Bilder benötigen ein geeignetes Entsorgungsmuster

Für die Fehlersuche bei Casting-Problemen bietet unser Leitfaden zur Fehlersuche Lösungen für häufige Probleme bei der Barcode-Erkennung.

Wie lese ich BarCodes aus AnyBitmap Objekten?

IronBarcode akzeptiert IronSoftware.Drawing.AnyBitmap Objekte in allen Methoden ohne zusätzliche Konfiguration. Dies vereinfacht die Entwicklung bei der Verwendung von System.Drawing-Objekten auf Nicht-Windows-Betriebssystemen. Der folgende Code demonstriert dies:

Welche Methoden akzeptieren AnyBitmap Parameter?

: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

Neben der grundlegenden Methode Read bietet IronBarcode mehrere Methoden, die AnyBitmap-Parameter akzeptieren. Für fortgeschrittene Szenarien siehe unseren Leitfaden zum Lesen mehrerer Barcodes, der die effiziente Verarbeitung mehrerer Barcodes in einem einzigen Bild zeigt:

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

Wie behandle ich mehrere BarCode-Ergebnisse?

Der obige Code ist eine Erweiterung des vorherigen Beispiels. Nachdem wir die AnyBitmap-Liste aufgefüllt hatten, haben wir sie durchlaufen und die Read-Methode für jedes AnyBitmap-Objekt aufgerufen, die IronBarcode.BarcodeResults zurückgab. Anschließend haben wir die Ergebnisse iteriert, um die Barcodewerte auf der Konsole auszugeben.

Nutzen Sie bei der Verarbeitung mehrerer BarCodes die parallele Verarbeitung für eine bessere Leistung:

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

Welche anderen IronDrawing-Funktionen kann ich nutzen?

die Funktionalität von IronSoftware.Drawing geht über das Gießen von Bildern hinaus. Sie behandelt Aspekte der Bildverarbeitung wie Farben und Schriftarten, die für die Gestaltung von Barcodes und QR-Codes nützlich sind. Erfahren Sie, wie wir IronDrawing nutzen, um QR-Codes individuell zu gestalten und Logos hinzuzufügen.

IronDrawing bietet leistungsstarke Bildbearbeitungsfunktionen, die die Barcode-Verarbeitung ergänzen:

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

Für Szenarien, die spezielle Bildkorrekturen erfordern, finden Sie in unserem Leitfaden zur Bildkorrektur Details zur Verwendung von Filtern zur Verbesserung der Lesbarkeit von Barcodes.

Warum wählen Sie IronDrawing gegenüber System.Drawing?

IronDrawing bietet überzeugende Vorteile gegenüber System.Drawing:

  1. Plattformübergreifende Unterstützung: Funktioniert nahtlos auf Windows, Linux und macOS im Gegensatz zu System.Drawing (nur Windows in .NET Core/5+)
  2. Moderne Architektur: Basiert auf SkiaSharp und ImageSharp für bessere Leistung und Speicherverwaltung
  3. Vereinfachte API: Behält die vertrauten System.Drawing-ähnlichen Schnittstellen bei und fügt gleichzeitig moderne Annehmlichkeiten hinzu
  4. Aktive Entwicklung: Regelmäßige Updates und Verbesserungen, im Gegensatz zu System.Drawing im Wartungsmodus
  5. Bessere Integration: Speziell für eine optimale Leistung mit IronSoftware-Produkten entwickelt

Überlegungen zur Bereitstellung, insbesondere für Cloud-Umgebungen, finden Sie in unseren Leitfäden zu Bereitstellung auf Azure und Bereitstellung auf AWS, die spezielle Hinweise zur plattformübergreifenden Kompatibilität mit IronDrawing enthalten.

Egal, ob Sie Desktop-Anwendungen, Webservices oder Cloud-native Lösungen entwickeln, IronDrawing stellt sicher, dass Ihr Code zur Barcode-Verarbeitung über alle Plattformen hinweg portabel und effizient bleibt, und ist damit die ideale Wahl für die moderne .NET-Entwicklung.

Häufig gestellte Fragen

Wie kann ich Barcodes aus System.Drawing-Objekten auf Nicht-Windows-Plattformen lesen?

IronBarcode übernimmt automatisch das plattformübergreifende Lesen von Barcodes aus System.Drawing-Objekten durch IronDrawing, das sie in das AnyBitmap-Format konvertiert. Dies löst Microsofts Einschränkung, dass System.Drawing nur für Windows geeignet ist, und ermöglicht es Ihnen, Barcodes auf MacOS- und Linux-Systemen nahtlos zu lesen.

Was ist IronDrawing und warum ist es im Lieferumfang von Barcode Reading enthalten?

IronDrawing ist eine kostenlose, von IronSoftware entwickelte Open-Source-Bibliothek, die plattformübergreifende Unterstützung für Grafikoperationen bietet. Sie ist automatisch enthalten, wenn Sie IronBarcode aus NuGet installieren. Sie ermöglicht das Lesen von Barcodes aus System.Drawing-Objekten auf allen Betriebssystemen, indem sie diese in das kompatible AnyBitmap-Format konvertiert.

Wie kann ich eine System.Drawing.Bitmap konvertieren, um Barcodes daraus zu lesen?

Sie können Barcodes aus System.Drawing.Bitmap mit einem einfachen Cast auf AnyBitmap lesen: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. IronBarcode erledigt die Konvertierung automatisch durch IronDrawing's implizites Casting Feature.

Kann ich Strichcodes unter Linux und MacOS mit System.Drawing lesen?

Ja, IronBarcode ermöglicht das Lesen von Barcodes aus System.Drawing-Objekten unter Linux und MacOS durch IronDrawing, das System.Drawing-Objekte automatisch in das plattformübergreifende AnyBitmap-Format konvertiert. Damit wird Microsofts Windows-Beschränkung für die System.Drawing-Unterstützung überwunden.

Welche Arten von System.Drawing-Objekten können zum Lesen von Barcodes verwendet werden?

IronBarcode unterstützt das Lesen von Barcodes aus verschiedenen System.Drawing-Objekten, einschließlich System.Drawing.Bitmap und anderen Bildtypen. Diese werden durch die implizite Casting-Funktion von IronDrawing automatisch in AnyBitmap konvertiert, was plattformübergreifende Barcode-Scanfunktionen ermöglicht.

Gibt es eine einfache einzeilige Lösung zum Lesen von Barcodes aus System.Drawing?

Ja, IronBarcode bietet eine Ein-Zeilen-Lösung: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. Diese einzige Zeile erstellt ein System.Drawing.Bitmap, wandelt es über IronDrawing in AnyBitmap um und liest alle im Bild vorhandenen Barcodes.

Hairil Hasyimi Bin Omar
Software Ingenieur
Wie alle großen Ingenieure ist Hairil ein leidenschaftlicher Lerner. Er verfeinert sein Wissen in C#, Python und Java, um Iron Software-Teammitgliedern Mehrwert zu bieten. Hairil kam von der Universiti Teknologi MARA in Malaysia, wo er seinen Bachelor in Chemie- und Verfahrenstechnik abschloss.
Bereit anzufangen?
Nuget Downloads 2,002,059 | Version: 2025.12 gerade veröffentlicht