Wie man Barcodes aus System Drawing-Objekten liest

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 ermöglicht das Lesen von BarCodes aus System.Drawing-Objekten auf allen Betriebssystemen, indem diese automatisch über IronDrawing in AnyBitmap konvertiert werden, wodurch die Beschränkung von Microsoft auf Windows für die Unterstützung von System.Drawing umgangen wird.

Einleitung

System.Drawing-Objekte werden in .NET häufig für Bildverarbeitungsaufgaben verwendet. Microsoft hat jedoch die Unterstützung für System.Drawing unter 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 in der Regel Grafiken, Bilder und Schriftarten umfasst.

Um dieses Problem zu lösen, haben wir IronDrawing eingeführt. Diese kostenlose Open-Source-Bibliothek, die von Iron Software entwickelt wurde, vereinfacht die plattformübergreifende Unterstützung und bietet ein nahtloses Erlebnis. Wenn Sie IronBarcode über NuGet installieren, wird IronDrawing automatisch in Ihr Projekt eingebunden.

Entwickler, die noch keine Erfahrung mit dem Lesen von BarCodes haben, finden in unserem umfassenden Tutorial zum Lesen von BarCodes eine Einführung in die grundlegenden Konzepte und Anwendungsmuster. Wenn Sie mit verschiedenen Bildformaten arbeiten, bietet unser Leitfaden zum Lesen von BarCodes aus Bildern zusätzlichen Kontext und Beispiele.

Schnellstart: Lesen Sie einen BarCode mit AnyBitmap in einer einfachen Zeile

Dieser Ausschnitt zeigt, wie IronBarcode Barcodes liest, indem es ein System.Drawing.Bitmap erstellt und IronDrawing implizit in AnyBitmap umwandeln lässt. Mit nur einer Zeile erzielen Entwickler auf jedem Betriebssystem schnelle Ergebnisse.

  1. Installieren Sie IronBarcode mit NuGet Package Manager

    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, IronBarcode in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

Wie konvertiere ich System.Drawing-Objekte in AnyBitmap?

Das Lesen von BarCodes aus System.Drawing erfordert die Typumwandlung des Objekts in AnyBitmap. IronDrawing wurde im Hinblick auf Benutzerfreundlichkeit entwickelt und unterstützt implizites Casting für Bildobjekte von System.Drawing in IronSoftware.Drawing-Bildobjekte, die als AnyBitmap bezeichnet werden.

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 gezeigt, wie BarCode-Bilder von System.Drawing-Objekten in IronSoftware.Drawing.AnyBitmap umgewandelt werden:

Welche System.Drawing-Typen können umgewandelt 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 über IronDrawing. Diese Kompatibilität erstreckt sich auf verschiedene BarCode-Formate, die in unserem Leitfaden zu unterstützten BarCode-Formaten aufgeführt sind, darunter QR-Codes, Code 128, Code 39 und viele andere.

Warum funktioniert implizites Casting?

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

Der implizite Typumwandlungsmechanismus von IronDrawing nutzt Operatorüberladung und ermöglicht eine transparente Konvertierung zwischen System.Drawing-Typen und AnyBitmap. Dieses Entwurfsmuster ermöglicht es Entwicklern, bestehenden Code beizubehalten und gleichzeitig plattformübergreifende Kompatibilität zu erreichen. Bei der Konvertierung bleiben alle Bildeigenschaften wie Auflösung, Farbtiefe und Pixeldaten erhalten, sodass kein Qualitätsverlust entsteht.

Wann sollte ich explizites und wann implizites Casting verwenden?

Während implizites Casting Komfort bietet, kann explizites Casting in manchen Szenarien vorzuziehen sein:

// 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
$vbLabelText   $csharpLabel

Was sind häufige Typumwandlungsfehler?

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

  1. Null-Referenz-Ausnahmen: Überprüfen Sie vor dem Casting, ob Ihr System.Drawing-Objekt nicht null ist
  2. Ausnahmen bei nicht unterstützten Formaten: Einige seltene Bildformate erfordern eine Vorabkonvertierung
  3. Speicherprobleme: Große Bilder erfordern geeignete Entsorgungsmuster

Zur Behebung von Casting-Problemen bietet unser Leitfaden zur Fehlerbehebung Lösungen für häufige Probleme bei der BarCode-Erkennung.

Wie lese ich BarCodes von 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 veranschaulicht 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;

// 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
$vbLabelText   $csharpLabel

Über die grundlegende Read-Methode hinaus bietet IronBarcode mehrere Methoden, die AnyBitmap-Parameter akzeptieren. Für fortgeschrittene Szenarien lesen Sie unseren Leitfaden zum Lesen mehrerer BarCodes, der die effiziente Verarbeitung mehrerer BarCodes in einem einzigen Bild veranschaulicht:

// Advanced barcode reading with options
var readerOptions = new BarcodeReaderOptions
{
    // Specify barcode types to search for
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Co/de128,
    // 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.Co/de128,
    // 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)
$vbLabelText   $csharpLabel

Wie gehe ich mit mehreren BarCode-Ergebnissen um?

Der obige Code erweitert das vorherige Beispiel. Nachdem wir die Liste AnyBitmap gefüllt hatten, durchliefen wir sie und riefen die Methode Read für jedes Objekt AnyBitmap auf, was IronBarCode.BarcodeResults zurückgab. Anschließend haben wir die Ergebnisse durchlaufen, um BarCode-Werte auf der Konsole auszugeben.

Bei der Verarbeitung mehrerer BarCodes sollten Sie Parallelverarbeitung nutzen, um eine bessere Leistung zu erzielen:

// 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
$vbLabelText   $csharpLabel

Welche weiteren IronDrawing-Funktionen kann ich nutzen?

IronSoftware.Drawing Die Funktionalität geht über das Rendern 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 anzupassen und mit Logos zu versehen.

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.Co/ntrast(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.Co/ntrast(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)
$vbLabelText   $csharpLabel

Für Szenarien, die spezifische Bildkorrekturen erfordern, beschreibt unser Leitfaden zur Bildkorrektur detailliert, wie Filter eingesetzt werden können, um die Lesbarkeit von BarCodes zu verbessern.

Warum IronDrawing statt System.Drawing wählen?

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

  1. Plattformübergreifende Unterstützung: Funktioniert nahtlos unter 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 vertraute System.Drawing-ähnliche Schnittstellen bei und bietet gleichzeitig moderne Annehmlichkeiten
  4. Aktive Entwicklung: Regelmäßige Updates und Verbesserungen, im Gegensatz zu System.Drawing im Wartungsmodus
  5. Bessere Integration: Speziell für optimale Leistung mit Iron Software-Produkten entwickelt

Hinweise zur Bereitstellung, insbesondere für Cloud-Umgebungen, finden Sie in unseren Anleitungen zur Bereitstellung auf Azure und zur Bereitstellung auf AWS, die spezifische Hinweise zur plattformübergreifenden Kompatibilität unter Verwendung von IronDrawing enthalten.

Ob Sie nun Desktop-Anwendungen, Webdienste oder Cloud-native Lösungen entwickeln – IronDrawing stellt sicher, dass Ihr Code zur BarCode-Verarbeitung plattformübergreifend portabel und effizient bleibt, und ist damit die ideale Wahl für 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 Iron Software entwickelte Open-Source-Bibliothek, die plattformübergreifende Unterstützung für Grafikoperationen bietet. Sie ist automatisch enthalten, wenn Sie IronBarcode von 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.

Bietet IronBarcode Unterstützung für die Anpassung des Barcode-Aussehens?

Ja, IronBarcode bietet umfangreiche Anpassungsoptionen für das Barcode-Aussehen, einschließlich Farbe, Größe und Textanmerkungen, sodass Sie Barcodes an Ihre spezifischen Designanforderungen anpassen können.

Wie kann IronBarcode zur Verbesserung der Effizienz von Geschäftsprozessen beitragen?

IronBarcode erhöht die Effizienz von Geschäftsprozessen, indem es eine schnelle und genaue Barcode-Erzeugung und -Lesen ermöglicht, manuelle Dateneingabefehler reduziert und die Verfolgung von Beständen und Vermögensgegenständen verbessert.

Welche Programmierkenntnisse sind erforderlich, um IronBarcode in einem Projekt zu implementieren?

Grundkenntnisse in C#-Programmierung reichen aus, um IronBarcode in einem Projekt zu implementieren, da es unkomplizierte Methoden und eine umfassende Dokumentation für Entwickler bietet.

Ist IronBarcode sowohl für kleine Projekte als auch für große Unternehmensanwendungen geeignet?

IronBarcode ist so konzipiert, dass es skalierbar und vielseitig ist, wodurch es sich sowohl für kleine Projekte als auch für große Unternehmensanwendungen eignet, die robuste Barcode-Lösungen benötigen.

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,240,258 | Version: 2026.5 just released
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package BarCode
Führen Sie ein Beispiel aus und beobachten Sie, wie Ihre Zeichenkette zu einem BarCode wird.