Lesen von System.Drawing-Objekten in C
IronOCR ermöglicht das Lesen von Text aus System.Drawing-Objekten wie Bitmap und Image, indem es sie in OcrImageInput einwickelt und so nahtlose OCR-Funktionalität for .NET-Anwendungen über Windows, macOS und Linux hinweg bietet.
System.Drawing.Bitmap ist eine Klasse im .NET Framework, die zum Arbeiten 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. Es 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. Es hilft C#-Softwareingenieuren, System.Drawing.Common in .NET-Projekten auf Windows, macOS und Linux zu ersetzen.
Schnellstart: Text aus einer System.Drawing.Bitmap lesen
Mit einer einzigen Anweisung erstellen Sie ein IronTesseract und geben ihm ein System.Drawing.Bitmap, das von OcrImageInput umwickelt wird, um allen Text zu extrahieren. Dieses Schnellstart-Beispiel zeigt, wie IronOCR Bilder mit minimaler Einrichtung in lesbaren Text umwandelt.
-
Installieren Sie IronOCR mit NuGet Package Manager
-
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"))); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronOCR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Wie man in C# aus System.Drawing-Objekten liest
- Herunterladen einer C#-Bibliothek zum Lesen von System.Drawing-Objekten
- Beziehen Sie System.Drawing-Objekte wie
BitmapundImage - Konstruieren Sie die Klasse
OcrImageInputunter Verwendung der erfassten Daten - Nutzen Sie
AnyBitmapvon Iron Software für Linux und macOS - Definieren Sie den Lesebereich, indem Sie das Beschnittrechteck angeben
Wie lese ich aus System.Drawing.Bitmap?
Zuerst instanziieren Sie die IronTesseract-Klasse, um OCR durchzuführen. Erstellen Sie ein 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 übergeben Sie ihm das Bild aus dem System.Drawing.Bitmap-Objekt. Verwenden Sie schließlich die Read-Methode, um OCR auszufü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);
Imports IronOcr
Imports System.Drawing
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Read image file to Bitmap
Private bitmap As New Bitmap("Potter.tiff")
' Import System.Drawing.Bitmap
Private imageInput = New OcrImageInput(bitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
Warum ist die using-Anweisung für OcrImageInput wichtig?
Die using-Anweisung ist entscheidend beim Arbeiten mit OcrImageInput, 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, wenn Sie mit dem Objekt fertig sind. Ohne die using-Anweisung könnten diese Ressourcen nicht sofort freigegeben werden, was potenziell zu Speicherverlusten 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?
Bitmap bietet mehrere Lademethoden über den im Beispiel verwendeten Dateipfadkonstruktor hinaus. Sie können Bitmap aus Streams (StreamReader), aus bestehenden Image (Image) oder sogar leere Bitmaps mit bestimmten Abmessungen (Bitmap) 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 Resources verwenden. IronOCR verarbeitet all diese source-Quellen nahtlos über den Bitmap-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 nur das bitmap für OCR benötigen, legen Sie es direkt nach dem Erstellen des ocrResult ab. 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 eine Entsorgung sicherzustellen. Denken Sie daran, dass OcrImageInput seine eigene interne Kopie erstellt, sodass das Original-bitmap nach der OcrImageInput-Erstellung 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 Image ist einfach, indem Sie das OcrInput-Objekt mit dem Image erstellen und dann den standardmäßigen OCR-Prozess mit der Read-Methode durchführen.
: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);
Imports IronOcr
Imports Image = System.Drawing.Image
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Open image file as Image
Private image As Image = Image.FromFile("Potter.tiff")
' Import System.Drawing.Image
Private imageInput = New OcrImageInput(image)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
Was ist der Unterschied zwischen Bild und Bitmap für OCR?
Während Bitmap eine spezifische Implementierung für Bitmap-Bilder ist, ist Image eine abstrakte Basisklasse, die verschiedene Bildformate einschließlich JPEG, PNG, GIF und TIFF darstellen kann. Für OCR-Zwecke behandelt IronOCR beides identisch durch OcrInput, aber Image bietet mehr Flexibilität beim Umgang 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 MemoryStream eignen sich besser für Webanwendungen oder beim Arbeiten mit Speicher-Streams. FileStream sperrt die Datei, bis die FileStream entsorgt wird, was in Multithread-Anwendungen eine Überlegung 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?
In ähnlicher Weise können Sie nach dem Erstellen oder Erhalten eines AnyBitmap-Objekts die OcrInput-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);
Imports IronOcr
Imports IronSoftware.Drawing
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Open image file as AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")
' Import IronSoftware.Drawing.AnyBitmap
Private imageInput = New OcrImageInput(anyBitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
Warum AnyBitmap den System.Drawing-Klassen vorziehen?
AnyBitmap bietet eine überlegene plattformübergreifende Kompatibilität im Vergleich zu Bitmap-Klassen. Während Bitmap auf nicht-Windows-Plattformen in .NET 6+ eingeschränkten Support hat, funktioniert AnyBitmap nahtlos über Windows, Linux und macOS hinweg. Es bietet eine konsistente API ohne plattformspezifische Abhängigkeiten und ist damit ideal für Cloud-Bereitstellungen und containerisierte Anwendungen. AnyBitmap bietet auch 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 ein effizientes Speichermanagement durch Integration der automatischen Speicherbereinigung 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 AnyBitmap, das Dateisperren halten kann, lädt AnyBitmap Bilder vollständig in den Speicher und verhindert so Zugriffsprobleme auf Dateien. Außerdem bietet sie eine bessere Kontrolle über die Speichernutzung in Szenarien mit hohem Durchsatz. Für 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 OcrInput-Klasse 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);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)
' Add image
Private imageInput = New OcrImageInput("Potter.tiff", ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Output the result to console
Console.WriteLine(ocrResult.Text)
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?
Die Bestimmung der Koordinaten erfordert das Verständnis, 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. Für dynamische Layouts sollten Sie in Betracht ziehen, zuerst mit IronOCR einen vollständigen Scan durchzuführen und dann die OcrResult zu analysieren, um die Textpositionen programmgesteuert 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
using
OcrImageInput
OcrImageInput
IDisposable
using
System.Drawing.Bitmap
Bitmaps
new Bitmap(stream)
Images
new Bitmap(image)
new Bitmap(width, height)
Assembly.GetManifestResourceStream()
Bitmap
OcrImageInput
Bitmap
OcrImageInput
using
OcrImageInput
Bitmap
OcrImageInput
System.Drawing.Image
OcrImageInput
Image
Read
System.Drawing.Bitmap
System.Drawing.Image
OcrImageInput
Image
Bitmap
Image
Image.FromFile
Image.FromStream
Image.FromFile
Image
AnyBitmap
OcrImageInput
AnyBitmap
System.Drawing
System.Drawing.Common
AnyBitmap
AnyBitmap
AnyBitmap
AnyBitmap
System.Drawing.Bitmap
AnyBitmap
AnyBitmap
OcrImageInput
Rectangle
OcrResult
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.
Unterstützt IronOCR mehrere Sprachen?
IronOCR unterstützt mehrere Sprachen und ist damit ein vielseitiges Werkzeug für globale Anwendungen, die Texterkennung in verschiedenen Sprachen erfordern.
Kann IronOCR in bestehende Anwendungen integriert werden?
IronOCR ist darauf ausgelegt, leicht in bestehende Anwendungen mithilfe von C# integriert zu werden, sodass Entwickler OCR-Funktionalität mit minimalem Aufwand zu ihrer Software hinzufügen können.
Was sind die Vorteile der Nutzung von IronOCR für das Dokumentenmanagement?
Die Verwendung von IronOCR für das Dokumentenmanagement rationalisiert den Arbeitsablauf, indem gescannte Dokumente in durchsuchbare und bearbeitbare Texte umgewandelt werden, wodurch der Bedarf an manueller Dateneingabe reduziert und die Zugänglichkeit von Dokumenten verbessert wird.
Wie kann IronOCR die Datenqualität verbessern?
IronOCR verbessert die Datenqualität durch seine fortschrittlichen Erkennungsalgorithmen und Bildkorrekturfunktionen, die sicherstellen, dass der Textextraktionsprozess sowohl zuverlässig als auch genau ist.
Gibt es eine kostenlose Testversion von IronOCR?
Ja, Iron Software bietet eine kostenlose Testversion von IronOCR an, die es den Benutzern ermöglicht, die Funktionen und Fähigkeiten zu testen, bevor sie eine Kaufentscheidung treffen.

