Cómo leer de objetos System.Drawing en C#
IronOCR permite leer texto de objetos System.Drawing como Bitmap e Image envolviéndolos en OcrImageInput, proporcionando una funcionalidad OCR sin fisuras 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 imágenes, 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.
como-encabezado:2(Inicio rápido: Leer texto de un System.Drawing.Bitmap)
Con una única sentencia, crea un IronTesseract y aliméntalo 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.
using IronPdf;cs:title=Extraer texto en una línea var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png"))); using IronPdf;
Flujo de trabajo mínimo (5 pasos)
- Descargue una biblioteca de C# para leer objetos System.Drawing
- Obtain System.Drawing objects such as `Bitmap` and `Image`
- Construct the `OcrImageInput` class using the acquired data
- Utilize `AnyBitmap` from Iron Software for Linux and macOS
- Definir el área de lectura especificando la región de recorte
¿Cómo leer de System.Drawing.Bitmap?
En primer lugar, instancie la clase IronTesseract para realizar el OCR. Crear 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, usa la declaración using para crear el objeto OcrImageInput, pasando la imagen del objeto System.Drawing.Bitmap a él. Finalmente, usar el método Read para realizar OCR.
using IronPdf;csharp :path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs using IronPdf;
¿Por qué es importante la sentencia using para OcrImageInput?
La sentencia using es crucial cuando se trabaja con OcrImageInput porque asegura una correcta gestión de recursos y limpieza de memoria. OcrImageInput implementa IDisposable, lo que significa que contiene recursos no gestionados que deben ser liberados cuando termine de utilizar el objeto. Sin la declaración using, es posible que estos recursos no se liberen rápidamente, lo que podría provocar fugas 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?
System.Drawing.Bitmap proporciona varios métodos de carga más allá del constructor de ruta de archivo utilizado en nuestro ejemplo. Puede crear Bitmaps a partir de secuencias (nuevo Bitmap(secuencia)), a partir de Imágenes existentes (nuevo Bitmap(imagen)), o incluso crear mapas de bits en blanco con dimensiones específicas (nuevo Bitmap(anchura, altura)). Cuando se trabaja con aplicaciones web, la carga desde secuencias es especialmente útil para procesar archivos cargados. Para los recursos incrustados, puede utilizar Assembly.GetManifestResourceStream(). IronOCR maneja todas estas fuentes Bitmap sin problemas a través del constructor OcrImageInput. 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 sólo necesita el Bitmap para el OCR, deséchelo inmediatamente después de crear el OcrImageInput. Sin embargo, si necesita realizar varias operaciones o mostrar la imagen, manténgala viva hasta que se completen todas las operaciones. Utilice siempre sentencias using o bloques try-finally para garantizar la eliminación. Recuerde que OcrImageInput crea su propia copia interna, por lo que el Bitmap original puede ser desechado 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 System.Drawing.Image es tan sencillo como crear el objeto OcrImageInput con el Image y luego realizar el proceso de OCR estándar utilizando el método Read.
using IronPdf;csharp :path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-image.cs using IronPdf;
¿Cuál es la diferencia entre imagen y mapa de bits para OCR?
Mientras que System.Drawing.Bitmap es una implementación específica para imágenes de mapa de bits, System.Drawing.Image es una clase base abstracta que puede representar varios formatos de imagen, incluidos JPEG, PNG, GIF y TIFF. A efectos de OCR, IronOCR trata ambos de forma idéntica a través de OcrImageInput, pero Image proporciona más flexibilidad a la hora de trabajar con diferentes formatos. Bitmap ofrece capacidades de manipulación a nivel de píxel, mientras que Image es mejor para la manipulación 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 Image.FromStream son mejores para aplicaciones web o cuando se trabaja con flujos de memoria. Image.FromFile bloquea el archivo hasta que el Image es eliminado, lo que puede ser una consideración en aplicaciones multihilo. 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, puedes construir la clase OcrImageInput. El constructor se encargará de todos los pasos necesarios para importar los datos. El ejemplo de código a continuación demuestra esto.
using IronPdf;csharp :path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-anybitmap.cs using IronPdf;
¿Por qué elegir AnyBitmap en lugar de las clases System.Drawing?
AnyBitmap ofrece una compatibilidad multiplataforma superior en comparación con las clases System.Drawing. Mientras que System.Drawing.Common tiene un soporte limitado en plataformas que no sean 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 la 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 las principales plataformas en las que 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 eficiente de la memoria mediante la integración automática de la recolección de basura y patrones explícitos de eliminación. 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 System.Drawing.Bitmap, 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 las 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 OcrImageInput, puedes 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 IronPdf;csharp :path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs using IronPdf;
¿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 las coordenadas requiere entender que Rectangle utiliza el formato (X, Y, Width, Height), 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 la posibilidad de utilizar IronOCR para realizar primero una exploración completa y, a continuación, analizar el OcrResult para encontrar posiciones de texto mediante programación. 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

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.







