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

Lesen von System.Drawing-Objekten in C#35;

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 es diese in OcrImageInput verpackt und so nahtlose OCR-Funktionalität für .NET-Anwendungen auf Windows-, macOS- und Linux-Plattformen bietet.

System.Drawing.Bitmap ist eine Klasse im .NET Framework, die für die Arbeit mit 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. Sie ist 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. Sie hilft C#-Softwareentwicklern, System.Drawing.Common in .NET-Projekten auf Windows-, macOS- und Linux-Plattformen zu ersetzen.

als-Überschrift:2(Schnellstart: Text aus einer System.Drawing.Bitmap lesen)

Erstellen Sie mit einer einzigen Anweisung einen IronTesseract und füttern Sie ihn mit einer System.Drawing.Bitmap, die von OcrImageInput umhüllt ist, um den gesamten Text zu extrahieren. Dieses Schnellstart-Beispiel zeigt, wie IronOCR Bilder mit minimaler Einrichtung in lesbaren Text umwandelt.

```cs:title=Text in einer Zeile extrahieren var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png")));


<div class="hsg-featured-snippet">
    <h3>Minimaler Arbeitsablauf (5 Schritte)</h3>
    <ol>
        <li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronOcr/">Herunterladen einer C#-Bibliothek zum Lesen von System.Drawing-Objekten</a></li>
        <li>Obtain System.Drawing objects such as `Bitmap` and `Image`</li>
        <li>Construct the `OcrImageInput` class using the acquired data</li>
        <li>Utilize `AnyBitmap` from Iron Software for Linux and macOS</li>
        <li>Definieren Sie den Lesebereich, indem Sie das Beschnittrechteck angeben</li>
    </ol>
</div>

<br class="clear">

## Wie lese ich aus System.Drawing.Bitmap?

<!-- TODO: Bild hier einfügen -->
<!-- ![Screenshot zur Demonstration von how do i read from system.drawing.bitmap? in IronPDF](/static-assets/images/TODO/how-do-i-read-from-system-drawing-bitmap-step_screenshot.webp) -->
<!-- Beschreibung: Screenshot, der den Schritt-für-Schritt-Prozess zeigt -->

Zunächst wird die Klasse **`IronTesseract`** instanziiert, um OCR durchzuführen. Erstellen Sie eine `System.Drawing.Bitmap` aus einer der verschiedenen Methoden. In dem Codebeispiel wird ein Dateipfad verwendet.

Verwenden Sie anschließend die `using`-Anweisung, um das `OcrImageInput`-Objekt zu erstellen und das Bild aus dem `System.Drawing.Bitmap`-Objekt hineinzureichen. Verwenden Sie schließlich die `Read`-Methode, um OCR durchzuführen.

```csharp
:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs

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

Die Anweisung using 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 enthält, die freigegeben werden müssen, wenn Sie mit dem Objekt fertig sind. Ohne die Anweisung using werden diese Ressourcen möglicherweise nicht rechtzeitig freigegeben, was 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 mehrere Lademethoden, die über den in unserem Beispiel verwendeten Dateipfad-Konstruktor hinausgehen. Sie können Bitmaps aus Streams (new Bitmap(stream)), aus bestehenden Images (new Bitmap(image)) 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 alle 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 die Bitmap nur für OCR benötigen, entsorgen Sie sie sofort nach der Erstellung von 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 immer using-Anweisungen oder try-finally-Blöcke, um die Entsorgung sicherzustellen. Denken Sie daran, dass OcrImageInput seine eigene interne Kopie erstellt, so dass die ursprüngliche Bitmap nach der Erstellung von OcrImageInput entsorgt 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 Lesen aus einem System.Drawing.Image ist so einfach wie das Erstellen des OcrImageInput-Objekts mit dem Image und das Ausführen des Standard-OCR-Prozesses mit der Methode Read.

: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 durch 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 sind besser für Webanwendungen oder bei der Arbeit mit Speicherströmen geeignet. Image.FromFile sperrt die Datei, bis das Image entsorgt wird, was bei Anwendungen mit mehreren Threads ein Problem darstellen 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?

Ähnlich können Sie nach dem Erstellen oder Erhalten eines AnyBitmap-Objekts die OcrImageInput-Klasse 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 System.Drawing-Klassen eine bessere plattformübergreifende Kompatibilität. Während System.Drawing.Common in .NET 6+ nur begrenzte Unterstützung auf Nicht-Windows-Plattformen hat, 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 auch eine bessere Speicherverwaltung 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 eine effiziente Speicherverwaltung durch automatische Integration der Garbage Collection 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 enthalten kann, lädt AnyBitmap Bilder vollständig in den Speicher und verhindert so Probleme beim Dateizugriff. Außerdem bietet sie eine bessere Kontrolle über die Speichernutzung in Szenarien mit hohem Durchsatz. Bei Anwendungen, die große Mengen von Bildern verarbeiten, kann die Speichereffizienz von AnyBitmap den Gesamtspeicherbedarf erheblich reduzieren. Tipps zur Migration finden Sie in unserem Leitfaden System.Drawing.Common Alternatives.

Wie kann ich eine Scan-Region angeben?

Beim Erstellen der OcrImageInput-Klasse können Sie den Bereich zum Scannen 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?

Um Koordinaten zu bestimmen, muss man 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 sollten Sie IronOCR verwenden, um zunächst einen vollständigen Scan durchzuführen und dann das OcrResult zu analysieren, um Textpositionen programmatisch zu finden. 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 im 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,299,091 | Version: 2025.12 gerade veröffentlicht