Lesen von System.Drawing-Objekten in C
IronOCR ermöglicht das Auslesen von Text aus System.Drawing-Objekten wie Bitmap und Image, indem diese in OcrImageInput eingeschlossen werden, und bietet so nahtlose OCR-Funktionalität for .NET-Anwendungen auf Windows-, macOS- und Linux-Plattformen.
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. Es ist die Oberklasse für verschiedene Bildtypen, darunter 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 dabei, System.Drawing.Common in .NET-Projekten auf Windows-, macOS- und Linux-Plattformen zu ersetzen.
Schnellstart: Text aus einer System.Drawing.Bitmap lesen
Erstellen Sie mit einer einzigen Anweisung ein IronTesseract und übergeben Sie ihm ein System.Drawing.Bitmap, das von OcrImageInput umschlossen ist, um den gesamten Text zu extrahieren. Dieses Schnellstart-Beispiel zeigt, wie IronOCR Bilder mit minimaler Einrichtung in lesbaren Text umwandelt.
-
Installieren Sie IronOCR mit NuGet Package Manager
PM > Install-Package IronOcr -
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?
Instanziieren Sie zunächst die Klasse , um die OCR durchzuführen. Erstellen Sie ein mit einer der verschiedenen Methoden. In dem Codebeispiel wird ein Dateipfad verwendet.
Verwenden Sie anschließend die Anweisung , um das Objekt-Objekt und übergeben Sie das Bild vom -Objekt an dieses. Verwenden Sie schließlich die Methode, um 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);
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 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?
Bitmap bietet mehrere Lademethoden, die über den in unserem Beispiel verwendeten Dateipfad-Konstruktor hinausgehen. Sie können Bitmap aus Streams (StreamReader), aus vorhandenen Image (Image) erstellen 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 den bitmap nur für die OCR benötigen, löschen Sie ihn sofort nach der Erstellung des ocrResult. 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 Entsorgung sicherzustellen. Beachten Sie, dass OcrImageInput eine eigene interne Kopie erstellt, sodass das ursprüngliche 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 Auslesen aus einem Image ist so einfach wie das Erstellen des OcrInput-Objekts mit dem Image und das anschließende Ausführen des Standard-OCR-Prozesses mithilfe 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);
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 wie JPEG, PNG, GIF und TIFF darstellen kann. Für OCR-Zwecke behandelt IronOCR beide identisch über OcrInput, aber Image bietet mehr Flexibilität bei der Arbeit mit verschiedenen Formaten. Bitmap bietet Funktionen zur Bearbeitung 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 bei der Arbeit mit Speicherströmen. FileStream sperrt die Datei, bis FileStream entsorgt wird, was bei Multithread-Anwendungen zu berücksichtigen ist. 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?
Ebenso können Sie nach dem Erstellen oder Abrufen eines AnyBitmap-Objekts die OcrInput-Klasse erstellen. 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 im Vergleich zu Bitmap-Klassen eine überlegene plattformübergreifende Kompatibilität. Während Bitmap in .NET 6+ auf Nicht-Windows-Plattformen 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 zudem eine verbesserte 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 die Integration einer automatischen Garbage Collection und expliziter 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 setzen kann, lädt AnyBitmap Bilder vollständig in den Arbeitsspeicher, 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?
Bei der Erstellung der OcrInput-Klasse können Sie den zu scannenden Bereich festlegen. 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?
Zur Bestimmung der Koordinaten muss man wissen, 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 zunächst mit IronOCR einen vollständigen Scan durchführen und anschließend den OcrResult analysieren, um Textpositionen programmgesteuert 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
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.

