How to Read Barcodes From System.Drawing in C#
IronBarcode ermöglicht das Lesen von Barcodes aus System.Drawing-Objekten auf allen Betriebssystemen, indem sie automatisch in AnyBitmap umgewandelt werden, wodurch Microsofts Windows-Only-Beschränkung für System.Drawing-Unterstützung gelöst wird.
Einführung
System.Drawing-Objekte werden in .NET häufig für Bildverarbeitungsaufgaben verwendet. Microsoft hat jedoch Unterstützung für System.Drawing auf macOS und Linux eingestellt und unterstützt nun exklusiv 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, erstellt von Iron Software, vereinfacht die Cross-Platform Unterstützung und bietet ein nahtloses Erlebnis. 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.
Schnellstart: Einen Barcode mitAnyBitmap in einer einfachen Zeile lesen
Dieser Ausschnitt zeigt, wie IronBarcode Barcodes liest, indem es ein System.Drawing.Bitmap erstellt und IronDrawing es implizit in AnyBitmap umwandeln lässt. Mit nur einer Zeile erhalten Entwickler auf jedem Betriebssystem schnelle Ergebnisse.
-
1Install IronBarcode with NuGet Package Manager
-
2Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.
var results = IronBarCode.BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));C# -
3Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronBarcode in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (5 Schritte)
- Herunterladen der C#-Bibliothek zum Lesen von Barcodes aus
System.Drawing - Verwenden Sie
IronDrawing, umSystem.Drawing-Objekte inAnyBitmapzu verwandeln - Verwenden Sie die Methode
Read, um Barcodes ausAnyBitmap-Objekten zu lesen - Zeigen Sie die erkannten Barcode-Werte auf der Konsole an
- In einem anderen Artikel erfahren Sie, wie
IronDrawingfür den Umgang mit Farbe und Schriftarten verwendet wird
Wie kann ich System.Drawing-Objekte in AnyBitmap umwandeln?
Das Lesen von Barcodes aus System.Drawing erfordert die Umwandlung des Objekts in AnyBitmap. IronDrawing wurde für einfache Bedienung entwickelt und unterstützt implizites Casting für Bildobjekte von System.Drawing in IronSoftware.Drawing-Bildobjekte genannt AnyBitmap.
Über System.Drawing-Objekte hinaus unterstützen wir das Casting von anderen Typen:
System.Drawing.BitmapSystem.Drawing.ImageSkiaSharp.SKBitmapSkiaSharp.SKImageSixLabors.ImageSharp
Siehe dieses Codebeispiel für das Casting der oben genannten Objekte. Unten wird das Casting von Barcode-Bildern von System.Drawing-Objekten in IronSoftware.Drawing.AnyBitmap demonstriert:
Welche System.Drawing-Typen können umgewandelt werden?
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)Dieser Code zeigt 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 luden wir zwei Barcode-Bilder als System.Drawing.Bitmap und System.Drawing.Image. Wir haben sie dann implizit in AnyBitmap umgewandelt, indem wir sie zu AnyBitmap-Objekten zugewiesen und diese Objekte dann zu einer AnyBitmap-Liste hinzugefügt haben.
Das implizite Casting-Mechanismus von IronDrawing verwendet Operatorüberladung und bietet eine transparente Umwandlung 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
}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 IfWas sind häufige Besetzungsfehler?
Beim Umwandeln von System.Drawing zu AnyBitmap könnten Entwickler auf Folgendes stoßen:
- Null Reference Exceptions: Stellen Sie sicher, dass Ihr
System.Drawing-Objekt nicht null ist, bevor Sie es umwandeln - Unterstützte Formatausnahmen: Einige exotische Bildformate erfordern eine Vorkonvertierung
- 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?
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Über die grundlegende Read-Methode hinaus 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,
// Set confidence threshold
ConfidenceThreshold = 0.95
};
// Read with specific options
var advancedResults = BarcodeReader.Read(anyBitmap, readerOptions);
Wie behandle ich mehrere BarCode-Ergebnisse?
Der obige Code ist eine Erweiterung des vorherigen Beispiels. Nach dem Befüllen der AnyBitmap-Liste haben wir sie durchlaufen und die Read-Methode auf jedem AnyBitmap-Objekt aufgerufen, was 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}");
}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 As New ConcurrentBag(Of BarcodeResult)()
Parallel.ForEach(barcodeFiles, Sub(file)
Dim bitmap As New Bitmap(file)
Dim anyBitmap As 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}")
NextWelche anderen IronDrawing-Funktionen kann ich verwenden?
IronSoftware.Drawing-Funktionalität geht über das Umwandeln 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 Logos hinzuzufügen.
IronDrawing bietet leistungsstarke Bildbearbeitungsfähigkeiten, 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);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)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 IronDrawing gegenüber System.Drawing wählen?
IronDrawing bietet überzeugende Vorteile gegenüber System.Drawing:
- Plattformübergreifende Unterstützung: Funktioniert nahtlos auf Windows, Linux und macOS, im Gegensatz zu
System.Drawing(nur Windows in .NET Core/5+) - Moderne Architektur: Auf
SkiaSharpundImageSharpaufgebaut für bessere Leistung und Speicherverwaltung - Vereinfachte API: Beibehaltung bekannter
System.Drawing-ähnlicher Schnittstellen bei gleichzeitig modernen Annehmlichkeiten - Aktive Entwicklung: Regelmäßige Updates und Verbesserungen, im Gegensatz zu
System.Drawingim Wartungsmodus - Bessere Integration: Speziell für eine optimale Leistung mit Iron Software Produkten entwickelt
Für Bereitstellungsüberlegungen, insbesondere für Cloud-Umgebungen, sehen Sie sich unsere Anleitungen zur Bereitstellung auf Azure und Bereitstellung auf AWS an, die spezifische Hinweise zur plattformübergreifenden Kompatibilität mit IronDrawing enthalten.
Egal ob Sie Desktop-Anwendungen, Webdienste oder Cloud-native Lösungen entwickeln, IronDrawing sorgt dafür, dass Ihr Barcode-Verarbeitungscode auf allen Plattformen portabel und effizient bleibt, was es zur idealen Wahl für die moderne .NET-Entwicklung macht.
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.
Is IronDrawing included when I install IronBarcode?
Yes, when you install IronBarcode from NuGet, IronDrawing is automatically included, ensuring seamless integration for cross-platform barcode scanning.
How do I handle multiple barcodes in a single image using IronBarcode?
Use the BarcodeReader.Read method with AnyBitmap, and leverage parallel processing to efficiently handle and read multiple barcodes in a single image.
What image processing features does IronDrawing provide?
IronDrawing can handle image processing tasks such as color adjustment and font handling, which are useful when styling barcodes and QR codes.
How does implicit casting help in cross-platform development?
Implicit casting in IronDrawing allows developers to convert System.Drawing objects to AnyBitmap without changing existing code, facilitating cross-platform compatibility and development for Linux, macOS, and Windows.
