Wie man System Drawing Images für die OCR-Verarbeitung in C# verwendet

Lesen von System.Drawing-Objekten in C

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

IronOCR ermöglicht das Lesen von Text aus System.Drawing Objekten wie Bitmap und Image, indem diese in OcrImageInput eingebunden werden. Dadurch wird eine nahtlose OCR-Funktionalität for .NET Anwendungen auf Windows-, macOS- und Linux-Plattformen bereitgestellt.

System.Drawing.Bitmap ist eine Klasse im .NET Framework , die zur Bearbeitung von Bitmap-Bildern verwendet wird. Sie bietet Methoden und Eigenschaften zum Erstellen, Bearbeiten und Anzeigen von Bitmap-Bildern.

System.Drawing.Image ist eine Basisklasse für alle GDI+ Bildobjekte im .NET Framework. Es handelt sich um die übergeordnete Klasse für verschiedene Bildtypen, einschließlich System.Drawing.Bitmap.

IronSoftware.Drawing.AnyBitmap ist eine Bitmap-Klasse in IronDrawing , einer Open-Source-Bibliothek, die ursprünglich von Iron Software entwickelt wurde. Es hilft C#-Softwareentwicklern, System.Drawing.Common in .NET Projekten auf Windows-, macOS- und Linux-Plattformen zu ersetzen.

Schnellstart: Text aus einer System.Drawing.Bitmap lesen

Mit einer einzigen Anweisung wird ein IronTesseract erstellt und diesem ein System.Drawing.Bitmap übergeben, der von OcrImageInput umschlossen ist, um den gesamten Text zu extrahieren. Dieses Schnellstart-Beispiel zeigt, wie IronOCR Bilder mit minimaler Einrichtung in lesbaren Text umwandelt.

  1. Installieren Sie IronOCR mit NuGet Package Manager

    PM > Install-Package IronOcr
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png")));
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronOCR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer


Wie lese ich aus System.Drawing.Bitmap?

Zuerst muss die Klasse IronTesseract instanziiert werden, um die OCR-Texterkennung durchzuführen. Erstellen Sie ein System.Drawing.Bitmap mithilfe einer der verschiedenen Methoden. In dem Codebeispiel wird ein Dateipfad verwendet.

Als Nächstes verwenden Sie die Anweisung using, um das Objekt OcrImageInput zu erstellen und übergeben ihm das Bild aus dem Objekt System.Drawing.Bitmap. Zum Schluss verwenden Sie die Methode Read, um die OCR durchzuführen.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs
using IronOcr;
using System.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to Bitmap
Bitmap bitmap = new Bitmap("Potter.tiff");

// Import System.Drawing.Bitmap
using var imageInput = new OcrImageInput(bitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

Warum ist die using-Anweisung für OcrImageInput wichtig?

Die using-Anweisung ist bei der Arbeit mit OcrImageInput von entscheidender Bedeutung, da sie eine ordnungsgemäße Ressourcenverwaltung und Speicherbereinigung gewährleistet. OcrImageInput implementiert IDisposable, was bedeutet, dass es nicht verwaltete Ressourcen hält, die freigegeben werden müssen, sobald das Objekt nicht mehr benötigt wird. Ohne die Anweisung using werden diese Ressourcen möglicherweise nicht umgehend freigegeben, was unter Umständen zu Speicherlecks oder Dateisperren führen kann. Dies ist besonders wichtig bei der Verarbeitung mehrerer Bilder in Stapelverarbeitungsprozessen. Weitere Einzelheiten zur richtigen Ressourcenverwaltung in IronOCR finden Sie in unserer API-Referenz-Dokumentation.

Was sind gängige Bitmap-Lademethoden?

System.Drawing.Bitmap bietet neben dem in unserem Beispiel verwendeten Dateipfadkonstruktor mehrere weitere Lademethoden. Sie können Bitmaps aus Streams (new Bitmap(stream)), aus vorhandenen Images (new Bitmap(image)) erstellen oder sogar leere Bitmaps mit bestimmten Abmessungen (new Bitmap(width, height)) erstellen. Bei der Arbeit mit Webanwendungen ist das Laden aus Streams besonders nützlich, um hochgeladene Dateien zu verarbeiten. Für eingebettete Ressourcen können Sie Assembly.GetManifestResourceStream() verwenden. IronOCR verarbeitet all diese Bitmap Quellen nahtlos über den OcrImageInput Konstruktor. Erfahren Sie mehr über die verschiedenen Eingabemethoden in unserem Bilder (jpg, png, gif, tiff, bmp) Leitfaden.

Wann sollte ich das Bitmap-Objekt entsorgen?

Der Zeitpunkt der Bitmap-Entsorgung hängt vom Workflow Ihrer Anwendung ab. Wenn Sie den Bitmap nur für die OCR benötigen, entsorgen Sie ihn sofort nach der Erstellung des OcrImageInput. Wenn Sie jedoch mehrere Operationen durchführen oder das Bild anzeigen müssen, halten Sie es am Leben, bis alle Operationen abgeschlossen sind. Verwenden Sie stets using Anweisungen oder try-finally Blöcke, um die Freigabe sicherzustellen. Beachten Sie, dass OcrImageInput eine eigene interne Kopie erstellt, sodass das Original Bitmap nach der Erstellung von OcrImageInput gelöscht werden kann. Für komplexe Szenarien, die mehrere Bildoperationen beinhalten, können Sie unsere OCR Image Optimization Filters Beispiele verwenden.

Wie kann ich aus System.Drawing.Image lesen?

Das Einlesen aus einem System.Drawing.Image ist so einfach wie das Erstellen des OcrImageInput-Objekts mit dem Image und die anschließende Durchführung des Standard-OCR-Prozesses mit der Read-Methode.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-image.cs
using IronOcr;
using Image = System.Drawing.Image;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Open image file as Image
Image image = Image.FromFile("Potter.tiff");

// Import System.Drawing.Image
using var imageInput = new OcrImageInput(image);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

Was ist der Unterschied zwischen Bild und Bitmap für OCR?

Während System.Drawing.Bitmap eine spezifische Implementierung für Bitmap-Bilder ist, ist System.Drawing.Image eine abstrakte Basisklasse, die verschiedene Bildformate wie JPEG, PNG, GIF und TIFF darstellen kann. Für OCR-Zwecke behandelt IronOCR beide identisch über OcrImageInput, aber Image bietet mehr Flexibilität bei der Arbeit mit verschiedenen Formaten. Bitmap bietet Manipulationsmöglichkeiten auf Pixelebene, während Image besser für die allgemeine Bildbearbeitung geeignet ist. Beide funktionieren gleichermaßen gut mit der fortschrittlichen Tesseract 5-Engine von IronOCR. Die Wahl hängt eher von Ihren breiteren Anwendungsanforderungen als von der OCR-Leistung ab.

Warum Image.FromFile gegenüber anderen Lademethoden verwenden?

Image.FromFile ist die einfachste und direkteste Methode zum Laden von Bildern von der Festplatte. Sie erkennt automatisch das Bildformat und übernimmt das Einlesen der Datei. Alternative Methoden wie Image.FromStream eignen sich besser für Webanwendungen oder bei der Arbeit mit Speicherströmen. Image.FromFile sperrt die Datei, bis Image freigegeben wird, was bei Multithread-Anwendungen zu berücksichtigen sein kann. Für Produktionsszenarien, die eine hohe Leistung oder einen gleichzeitigen Zugriff erfordern, sollten Sie in Erwägung ziehen, Bilder zunächst in Memory-Streams zu laden. Unser Multithreaded Tesseract OCR Beispiel demonstriert die besten Praktiken für die gleichzeitige Bildverarbeitung.

Wie lese ich aus IronSoftware.Drawing.AnyBitmap?

Analog dazu können Sie nach dem Erstellen oder Abrufen eines AnyBitmap-Objekts die Klasse OcrImageInput konstruieren. Der Konstruktor wird alle notwendigen Schritte zum Importieren der Daten durchführen. Das folgende Codebeispiel demonstriert dies.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-anybitmap.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Open image file as AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import IronSoftware.Drawing.AnyBitmap
using var imageInput = new OcrImageInput(anyBitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

Warum AnyBitmap den System.Drawing-Klassen vorziehen?

AnyBitmap bietet im Vergleich zu den System.Drawing Klassen eine überlegene plattformübergreifende Kompatibilität. Während System.Drawing.Common auf Nicht-Windows-Plattformen in .NET 6+ nur eingeschränkt unterstützt wird, funktioniert AnyBitmap nahtlos unter Windows, Linux und macOS. Es bietet eine konsistente API ohne plattformspezifische Abhängigkeiten und ist damit ideal für Cloud-Bereitstellungen und containerisierte Anwendungen. AnyBitmap bietet außerdem ein besseres Speichermanagement und Leistungsoptimierungen, die speziell für Bildverarbeitungsaufgaben entwickelt wurden. Ausführliche Informationen zur Kompatibilität finden Sie in unserer Kompatibilität-Dokumentation.

Welche Plattformen werden von AnyBitmap unterstützt?

AnyBitmap unterstützt alle wichtigen Plattformen, auf denen .NET läuft: Windows (x86, x64, ARM), Linux (einschließlich Alpine Linux für Docker) und macOS (sowohl Intel als auch Apple Silicon). Diese breite Plattformunterstützung macht es zur empfohlenen Wahl für moderne .NET-Anwendungen, die in verschiedenen Umgebungen ausgeführt werden müssen. Sie ist besonders wertvoll für Cloud-Bereitstellungen auf AWS Lambda oder Azure Functions. Erfahren Sie mehr über die plattformspezifische Einrichtung in unseren Anleitungen für Linux, macOS und Docker Umgebungen.

Wie handhabt AnyBitmap die Speicherverwaltung?

AnyBitmap implementiert effizientes Speichermanagement durch automatische Garbage Collection-Integration und explizite Entsorgungsmuster. Es verwendet Speicherpooling für häufig zugewiesene Puffer und implementiert Copy-on-Write-Semantik für bessere Leistung. Im Gegensatz zu System.Drawing.Bitmap, das Dateisperren halten kann, lädt AnyBitmap Bilder vollständig in den Speicher, wodurch Probleme beim Dateizugriff vermieden werden. Außerdem bietet sie eine bessere Kontrolle über die Speichernutzung in Szenarien mit hohem Durchsatz. Bei Anwendungen, die große Mengen an Bildern verarbeiten, kann die Speichereffizienz von AnyBitmap den gesamten Speicherbedarf erheblich reduzieren. Tipps zur Migration finden Sie in unserem Leitfaden System.Drawing.Common Alternatives.

Wie kann ich eine Scan-Region angeben?

Beim Erstellen der Klasse OcrImageInput können Sie den zu scannenden Bereich angeben. Dies ermöglicht es Ihnen, den spezifischen Bereich des Bilddokuments für OCR zu definieren. Je nach Bilddokument kann die Angabe des Scanbereichs die Leistung erheblich verbessern. In dem mitgelieferten Codebeispiel werden nur die Kapitelnummer und der Titel extrahiert.

:path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput("Potter.tiff", ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
$vbLabelText   $csharpLabel

Wann sollte ich die Regionssuche für eine bessere Leistung verwenden?

Das Scannen von Regionen verbessert die Leistung erheblich, wenn Sie nur Text aus bestimmten Bereichen eines einheitlichen Dokumentenlayouts benötigen. Häufige Anwendungsfälle sind das Extrahieren von Kopfzeilen, Formularfeldern, Rechnungssummen oder Ausweisdaten. Leistungssteigerungen sind vor allem bei großen Bildern von Bedeutung, bei denen der Text nur einen kleinen Teil einnimmt. Bei einer Rechnung mit einer Größe von 3000 x 4000 Pixeln kann das Scannen nur des Gesamtbetragsbereichs 10 bis 20 Mal schneller sein als eine ganzseitige OCR. Das Scannen von Regionen verbessert auch die Genauigkeit, indem potenzielle Störungen aus anderen Bereichen entfernt werden. Weitere Beispiele für Regionen finden Sie in unserem Leitfaden Inhaltsbereiche und Beschnittregionen in PDFs.

Wie bestimme ich die richtigen Koordinaten für meine Region?

Zur Bestimmung der Koordinaten ist es erforderlich zu verstehen, dass Rectangle das Format (X, Y, Breite, Höhe) verwendet, wobei (0,0) die obere linke Ecke ist. Beginnen Sie damit, Ihr Bild in einem Bildbearbeitungsprogramm zu öffnen, das Cursor-Koordinaten anzeigt. Alternativ können Sie auch die Debugging-Funktionen von IronOCR verwenden, um erkannte Textbereiche zu visualisieren. Bei dynamischen Layouts empfiehlt es sich, zunächst mit IronOCR einen vollständigen Scan durchzuführen und anschließend den OcrResult zu analysieren, um die Textpositionen programmatisch zu ermitteln. Unser Beispiel Highlight Texts for Debugging zeigt, wie OCR-Regionen für eine genaue Koordinatenbestimmung visualisiert werden können.

Was passiert, wenn der Bereich die Bildgrenzen überschreitet?

Wenn ein bestimmter Bereich die Bildgrenzen überschreitet, schneidet IronOCR ihn automatisch auf den gültigen Bildbereich zu. Wenn Ihr Bild beispielsweise 1000x1000 Pixel groß ist und Sie ein Rechteck bei (900, 900, 200, 200) angeben, wird IronOCR nur den Bereich von (900, 900) bis (1000, 1000) verarbeiten. Das automatische Ausschneiden verhindert Fehler, kann aber zu einer unvollständigen Textextraktion führen, wenn Ihre Koordinaten falsch sind. Überprüfen Sie Ihre Regionen immer anhand der tatsächlichen Bildabmessungen. Berechnen Sie bei dynamischen Bildgrößen die Regionen als Prozentsätze und nicht als feste Pixel. Der Leitfaden OCR Region of an Image enthält weitere Beispiele für die sichere Handhabung von Regionen.

OCR-Ergebnis

OCR-Extraktionsdemo, die den Text des Harry Potter-Kapitels in Photo Viewer und die extrahierte Ausgabe in der Debug-Konsole zeigt

Häufig gestellte Fragen

Wie extrahiere ich Text aus einer System.Drawing.Bitmap mit OCR in C#?

IronOCR macht es einfach, Text aus System.Drawing.Bitmap-Objekten zu extrahieren. Zuerst instanziieren Sie die IronTesseract-Klasse, dann verpacken Sie Ihre Bitmap in ein OcrImageInput-Objekt mit einer using-Anweisung und rufen schließlich die Read-Methode auf. Der minimale Code lautet: var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap));

Warum ist die using-Anweisung bei der Arbeit mit OcrImageInput wichtig?

Die using-Anweisung ist entscheidend, da OcrImageInput IDisposable implementiert und nicht verwaltete Ressourcen enthält, die ordnungsgemäß bereinigt werden müssen. Ohne sie riskieren Sie Speicherlecks oder Dateisperren, insbesondere bei der Verarbeitung mehrerer Bilder. IronOCR's OcrImageInput muss ordnungsgemäß entsorgt werden, um eine effiziente Ressourcenverwaltung in Ihren .NET-Anwendungen zu gewährleisten.

Kann ich OCR für System.Drawing.Image-Objekte durchführen?

Ja, IronOCR unterstützt OCR für System.Drawing.Image-Objekte, da Image die Basisklasse für Bitmap ist. Wickeln Sie Ihr Image-Objekt einfach in OcrImageInput ein, so wie Sie es mit einem Bitmap tun würden, und IronOCR extrahiert den Text nahtlos auf allen Windows-, macOS- und Linux-Plattformen.

Was ist IronSoftware.Drawing.AnyBitmap und wie hängt es mit OCR zusammen?

IronSoftware.Drawing.AnyBitmap ist eine Bitmap-Klasse von IronDrawing, einer Open-Source-Bibliothek, die System.Drawing.Common in .NET-Projekten ersetzen kann. Sie bietet plattformübergreifende Kompatibilität für Windows, macOS und Linux und ist damit ideal für die Verwendung mit IronOCR, wenn Sie eine konsistente Bildverarbeitung über verschiedene Betriebssysteme hinweg benötigen.

Kann ich einen bestimmten Bereich eines Bildes für die Textextraktion festlegen?

Ja, IronOCR ermöglicht es Ihnen, bestimmte Lesebereiche zu definieren, indem Sie Beschnittbereiche festlegen. Mit dieser Funktion können Sie die OCR-Verarbeitung auf bestimmte Abschnitte Ihrer System.Drawing-Objekte konzentrieren und so die Leistung und Genauigkeit verbessern, wenn Sie nur Text aus bestimmten Teilen eines Bildes benötigen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Rezensiert von
Jeff Fritz
Jeffrey T. Fritz
Principal Program Manager - .NET Community Team
Jeff ist außerdem Principal Program Manager für das .NET- und Visual Studio-Team. Er ist der ausführende Produzent der .NET Conf Virtual Conference Series und moderiert ‚Fritz and Friends‘, einen Livestream für Entwickler, der zweimal wöchentlich ausgestrahlt wird. Dort spricht er über Technik und schreibt gemeinsam mit den Zuschauern Code. Jeff schreibt Workshops, Präsentationen und plant Inhalte für die größten Microsoft-Entwicklerveranstaltungen, einschließlich Microsoft Build, Microsoft Ignite, .NET Conf und dem Microsoft MVP Summit.
Bereit anzufangen?
Nuget Downloads 5,525,971 | Version: 2026.3 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronOcr
Führen Sie ein Beispiel aus und beobachten Sie, wie Ihr Bild zu durchsuchbarem Text wird.