Cómo leer de objetos System.Drawing en C#
IronOCR permite leer texto desde System.Drawing objetos como Bitmap y Image envolviéndolos en OcrImageInput, proporcionando una funcionalidad OCR perfecta para aplicaciones .NET en plataformas Windows, macOS y Linux.
System.Drawing.Bitmap es una clase en el .NET Framework utilizada para trabajar con imágenes de mapa de bits. Proporciona métodos y propiedades para crear, manipular y mostrar imágenes de mapa de bits.
System.Drawing.Image es una clase base para todos los objetos de imagen GDI+ en el .NET Framework. Es la clase padre para varios tipos de imagen, incluyendo System.Drawing.Bitmap.
IronSoftware.Drawing.AnyBitmap es una clase de mapa de bits en IronDrawing, una biblioteca de código abierto desarrollada originalmente por Iron Software. Ayuda a los ingenieros de software C# a reemplazar System.Drawing.Common en proyectos .NET en plataformas Windows, macOS y Linux.
Con una sola declaración, cree un IronTesseract y aliméntelo con un System.Drawing.Bitmap envuelto por OcrImageInput para extraer todo el texto. Este ejemplo de inicio rápido muestra cómo IronOCR convierte imágenes en texto legible con una configuración mínima.
-
1Install IronOCR with NuGet Package Manager
-
2Copie y ejecute este fragmento de código.
var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png")));C# -
3Despliegue para probar en su entorno real
Comienza a usar IronOCR en tu proyecto hoy mismo con una prueba gratuita
Cómo leer de objetos System.Drawing en C#
- Descargue una biblioteca de C# para leer objetos System.Drawing
- Obtener objetos System.Drawing como
BitmapeImage - Construir la clase
OcrImageInpututilizando los datos adquiridos - Utilice
AnyBitmapde Iron Software para Linux y macOS - Definir el área de lectura especificando la región de recorte
¿Cómo leer de System.Drawing.Bitmap?
Primero, instancie la clase IronTesseract para realizar OCR. Cree un System.Drawing.Bitmap a partir de uno de los varios métodos. En el ejemplo de código, se utiliza una ruta de archivo.
A continuación, use la declaración using para crear el objeto OcrImageInput, pasando la imagen desde el objeto System.Drawing.Bitmap a él. Finalmente, use el método Read para realizar OCR.
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)¿Por qué es importante la sentencia using para OcrImageInput?
La declaración using es crucial al trabajar con OcrImageInput porque garantiza una adecuada gestión de recursos y liberación de memoria. OcrImageInput implementa IDisposable, lo que significa que posee recursos no gestionados que deben ser liberados cuando termine de usar el objeto. Sin la declaración using, estos recursos podrían no ser liberados a tiempo, lo que potencialmente podría llevar a pérdidas de memoria o bloqueos de archivos. Esto es especialmente importante cuando se procesan múltiples imágenes en operaciones por lotes. Para más detalles sobre la correcta gestión de recursos en IronOCR, consulte nuestra documentación API Reference.
¿Cuáles son los métodos habituales de carga de mapas de bits?
Bitmap proporciona varios métodos de carga más allá del constructor de ruta de archivo usado en nuestro ejemplo. Puede crear Bitmap a partir de flujos (StreamReader), de Image existentes (Image), o incluso crear mapas de bits en blanco con dimensiones específicas (Bitmap). Cuando se trabaja con aplicaciones web, la carga desde secuencias es especialmente útil para procesar archivos cargados. Para recursos incrustados, puede usar Resources. IronOCR maneja todas estas fuentes de source sin problemas a través del constructor Bitmap. Obtenga más información sobre los diferentes métodos de entrada en nuestra guía Imágenes (jpg, png, gif, tiff, bmp).
¿Cuándo debo deshacerme del objeto Bitmap?
El tiempo de eliminación de los mapas de bits depende del flujo de trabajo de su aplicación. Si solo necesita el bitmap para OCR, dispóngalo inmediatamente después de crear el ocrResult. Sin embargo, si necesita realizar varias operaciones o mostrar la imagen, manténgala viva hasta que se completen todas las operaciones. Siempre use declaraciones using o bloques try-finally para asegurar la disposición. Recuerde que OcrImageInput crea su propia copia interna, por lo que el bitmap original puede ser dispuesto después de la creación de OcrImageInput. Para situaciones complejas que impliquen múltiples operaciones de imagen, considere nuestros ejemplos de Filtros de optimización de imágenesOCR.
¿Cómo leer de System.Drawing.Image?
Leer desde un Image es tan sencillo como crear el objeto OcrInput con el Image y luego realizar el proceso OCR estándar usando el método Read.
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)¿Cuál es la diferencia entre imagen y mapa de bits para OCR?
Aunque Bitmap es una implementación específica para imágenes de mapa de bits, Image es una clase base abstracta que puede representar varios formatos de imagen, incluidos JPEG, PNG, GIF y TIFF. Para propósitos de OCR, IronOCR trata a ambos de manera idéntica a través de OcrInput, pero Image proporciona más flexibilidad al trabajar con diferentes formatos. Bitmap ofrece capacidades de manipulación a nivel de píxel, mientras que Image es mejor para el manejo general de imágenes. Ambas funcionan igual de bien con el avanzado motor Tesseract 5 de IronOCR. La elección depende de sus necesidades de aplicación más amplias que del rendimiento del OCR.
¿Por qué utilizar Image.FromFile en lugar de otros métodos de carga?
Image.FromFile es el método más sencillo y directo para cargar imágenes desde el disco. Detecta automáticamente el formato de la imagen y se encarga del proceso de lectura del archivo. Métodos alternativos como MemoryStream son mejores para aplicaciones web o al trabajar con flujos de memoria. FileStream bloquea el archivo hasta que se disponga el FileStream, lo que puede ser una consideración en aplicaciones multithread. Para escenarios de producción que requieran un alto rendimiento o acceso concurrente, considere cargar primero las imágenes en flujos de memoria. Nuestro ejemplo Multithreaded Tesseract OCR demuestra las mejores prácticas para el procesamiento concurrente de imágenes.
¿Cómo leer de IronSoftware.Drawing.AnyBitmap?
De manera similar, después de crear u obtener un objeto AnyBitmap, puede construir la clase OcrInput. El constructor se encargará de todos los pasos necesarios para importar los datos. El ejemplo de código a continuación demuestra esto.
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)¿Por qué elegir AnyBitmap en lugar de las clases System.Drawing?
AnyBitmap ofrece una compatibilidad superior entre plataformas en comparación con las clases de Bitmap. Aunque Bitmap tiene soporte limitado en plataformas no Windows en .NET 6+, AnyBitmap funciona sin problemas en Windows, Linux y macOS. Proporciona una API coherente sin dependencias específicas de la plataforma, por lo que es ideal para implementaciones en la nube y aplicaciones en contenedores. AnyBitmap también ofrece una mejor gestión de memoria y optimizaciones de rendimiento diseñadas específicamente para tareas de procesamiento de imágenes. Para obtener información detallada sobre compatibilidad, consulte nuestra documentación Compatibilidad.
¿Qué plataformas soporta AnyBitmap?
AnyBitmap es compatible con todas las plataformas principales donde se ejecuta .NET: Windows (x86, x64, ARM), Linux (incluido Alpine Linux para Docker) y macOS (tanto Intel como Apple Silicon). Esta amplia compatibilidad de plataformas lo convierte en la opción recomendada para aplicaciones .NET modernas que deban ejecutarse en diversos entornos. Es especialmente valioso para implementaciones en la nube en AWS Lambda o Azure Functions. Obtenga más información sobre la configuración específica de la plataforma en nuestras guías para Linux, macOS y entornos Docker.
¿Cómo gestiona AnyBitmap la memoria?
AnyBitmap implementa una gestión de memoria eficiente a través de la integración de recolección de basura automática y patrones de disposición explícita. Utiliza la agrupación de memoria para los búferes asignados con frecuencia e implementa la semántica de copia en escritura para mejorar el rendimiento. A diferencia de AnyBitmap, que puede mantener bloqueos de archivos, AnyBitmap carga imágenes completamente en memoria, evitando problemas de acceso a archivos. También proporciona un mejor control sobre el uso de la memoria en escenarios de alto rendimiento. Para aplicaciones que procesan grandes volúmenes de imágenes, la eficiencia de memoria de AnyBitmap puede reducir significativamente la huella de memoria total. Consulte nuestra guía System.Drawing.Common Alternatives para obtener consejos sobre la migración.
¿Cómo puedo especificar una región de exploración?
En la construcción de la clase OcrInput, puede especificar el área a escanear. Esto te permite definir la región específica del documento de imagen para OCR. Dependiendo del documento de imagen, especificar la región de escaneado puede mejorar significativamente el rendimiento. En el ejemplo de código proporcionado, solo se extraen el número de capítulo y el título.
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
Dim ocrTesseract As New IronTesseract()
' Specify crop region
Dim scanRegion As New Rectangle(800, 200, 900, 400)
' Add image
Using imageInput As New OcrImageInput("Potter.tiff", ContentArea:=scanRegion)
' Perform OCR
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Output the result to console
Console.WriteLine(ocrResult.Text)
End Using¿Cuándo debo utilizar la exploración de regiones para mejorar el rendimiento?
El escaneado por regiones mejora notablemente el rendimiento cuando sólo se necesita texto de áreas específicas de diseños de documentos coherentes. Los casos de uso más comunes incluyen la extracción de encabezados, campos de formularios, totales de facturas o información del DNI. Las mejoras de rendimiento son más significativas con imágenes grandes en las que el texto ocupa una pequeña parte. Para una factura de 3000x4000 píxeles, escanear sólo la región del importe total puede ser entre 10 y 20 veces más rápido que el OCR de página completa. El escaneado por regiones también mejora la precisión al eliminar el ruido potencial de otras áreas. Para ver más ejemplos basados en regiones, consulte nuestra guía Áreas de contenido y regiones de recorte con PDF.
¿Cómo puedo determinar las coordenadas correctas de mi región?
Determinar coordenadas requiere entender que Rectangle usa el formato (X, Y, Ancho, Altura), donde (0,0) es la esquina superior izquierda. Para empezar, abra la imagen en un editor de imágenes que muestre las coordenadas del cursor. Como alternativa, utilice las funciones de depuración de IronOCR para visualizar las regiones de texto detectadas. Para diseños dinámicos, considere usar IronOCR para realizar un escaneo completo primero, luego analizar el OcrResult para encontrar posiciones de texto programáticamente. Nuestro ejemplo Highlight Texts for Debugging muestra cómo visualizar regiones de OCR para determinar coordenadas con precisión.
¿Qué ocurre si la región supera los límites de la imagen?
Cuando una región especificada excede los límites de la imagen, IronOCR la recorta automáticamente en el área válida de la imagen. Por ejemplo, si su imagen tiene 1000x1000 píxeles y especifica un rectángulo en (900, 900, 200, 200), IronOCR sólo procesará el área comprendida entre (900, 900) y (1000, 1000). Este recorte automático evita errores, pero puede dar lugar a una extracción incompleta del texto si sus coordenadas son incorrectas. Valide siempre las regiones con las dimensiones reales de la imagen. Para tamaños de imagen dinámicos, calcule las regiones como porcentajes en lugar de píxeles fijos. La guía OCR Región de una imagen ofrece más ejemplos de manejo seguro de regiones.
Resultado OCR

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
Preguntas Frecuentes
¿Cómo extraigo texto de un mapa de bits System.Drawing.Bitmap utilizando OCR en C#?
IronOCR simplifica la extracción de texto de objetos System.Drawing.Bitmap. Primero, instancie la clase IronTesseract, luego envuelva su Bitmap en un objeto OcrImageInput usando una sentencia using, y finalmente llame al método Read. El código mínimo es: var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap));
¿Por qué es importante la declaración "using" cuando se trabaja con OcrImageInput?
La sentencia using es crucial porque OcrImageInput implementa IDisposable y contiene recursos no gestionados que necesitan una limpieza adecuada. Sin ella, se corre el riesgo de fugas de memoria o bloqueos de archivos, especialmente cuando se procesan varias imágenes. OcrImageInput de IronOCR requiere una eliminación adecuada para garantizar una gestión eficaz de los recursos en sus aplicaciones .NET.
¿Puedo realizar OCR en objetos System.Drawing.Image?
Sí, IronOCR soporta OCR en objetos System.Drawing.Image ya que Image es la clase base para Bitmap. Simplemente envuelva su objeto Image en OcrImageInput de la misma manera que lo haría con un Bitmap, y IronOCR extraerá el texto sin problemas en las plataformas Windows, macOS y Linux.
¿Qué es IronSoftware.Drawing.AnyBitmap y cómo se relaciona con OCR?
IronSoftware.Drawing.AnyBitmap es una clase de mapa de bits de IronDrawing, una biblioteca de código abierto que ayuda a sustituir System.Drawing.Common en proyectos .NET. Proporciona compatibilidad multiplataforma para Windows, macOS y Linux, por lo que es ideal para su uso con IronOCR cuando se necesita un manejo coherente de imágenes en diferentes sistemas operativos.
¿Puedo especificar una zona concreta de una imagen para la extracción de texto?
Sí, IronOCR permite definir áreas de lectura específicas especificando regiones de recorte. Esta característica le permite centrar el procesamiento de OCR en secciones concretas de sus objetos System.Drawing, mejorando el rendimiento y la precisión cuando sólo necesita texto de partes específicas de una imagen.
When should I choose the Image.FromFile method over other image loading techniques?
Image.FromFile is a straightforward method for loading images from disk as it detects formats automatically. It suits simple desktop applications, while memory streams are better for web applications or high-performance scenarios.
How does AnyBitmap handle memory management during OCR tasks?
AnyBitmap ensures efficient memory management via integration with garbage collection and explicit disposal patterns. It loads images fully into memory, preventing file access issues once processed, thus improving performance.
Can IronOCR handle different image formats with System.Drawing.Image?
Yes, IronOCR supports various image formats through System.Drawing.Image, providing flexibility in handling JPEG, PNG, GIF, and TIFF formats, all compatible with its Tesseract 5 engine.
How does IronOCR manage region scanning if the defined area exceeds image boundaries?
IronOCR automatically clips any region exceeding the image boundaries to the valid area, preventing errors but possibly leading to incomplete text extraction if coordinates are incorrect.
What considerations should be made for image disposal after OCR processing?
Disposal timing depends on your application's needs. Dispose of bitmap images immediately after OCR if not used further, ensuring resources are freed up, or manage lifespan selectively for additional operations.

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.