Cómo leer de objetos System.Drawing en C
IronOCR permite leer texto de 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 usada para trabajar con imágenes bitmap. 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 bitmap 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.
Inicio Rápido: Leer Texto de un System.Drawing.Bitmap
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.
-
Instala IronOCR con el Administrador de Paquetes NuGet
PM > Install-Package IronOcr -
Copie y ejecute este fragmento de código.
var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png"))); -
Despliegue 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 para realizar OCR. Cree un 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 para crear el objeto, pasando la imagen del objeto a él. Finalmente, use el método para realizar OCR.
: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)
¿Por qué es importante la sentencia using para OcrImageInput?
La declaración using es crucial cuando se trabaja con OcrImageInput porque asegura una gestión adecuada de recursos y limpieza de memoria. OcrImageInput implementa IDisposable, lo que significa que contiene recursos no administrados que deben liberarse cuando termines con el objeto. Sin la declaración using, estos recursos podrían no liberarse de inmediato, lo que podría llevar a 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?
Bitmap proporciona varios métodos de carga más allá del constructor de la ruta de archivo utilizado en nuestro ejemplo. Puede crear Bitmap desde flujos (StreamReader), desde Image existentes (Image), o incluso crear bitmaps 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, puedes usar Resources. IronOCR maneja todas estas fuentes source perfectamente 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 necesitas el bitmap para OCR, deséchalo 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 usa declaraciones using o bloques try-finally para asegurar el desecho. Recuerda 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 Image es tan simple como crear el objeto OcrInput con el Image y luego realizar el proceso OCR estándar usando el método 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);
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?
Mientras que Bitmap es una implementación específica para imágenes bitmap, Image es una clase base abstracta que puede representar varios formatos de imagen, incluidos JPEG, PNG, GIF y TIFF. Para fines de OCR, IronOCR trata a ambos de manera idéntica a través de OcrInput, pero Image ofrece más flexibilidad al trabajar con diferentes formatos. Bitmap ofrece capacidades de manipulación a nivel de píxeles, 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 simple 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 cuando se trabaja con flujos de memoria. FileStream bloquea el archivo hasta que FileStream se desecha, lo cual puede ser una consideración en aplicaciones multi-hilo. 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 OcrInput. El constructor se encargará de todos los pasos necesarios para importar los datos. El ejemplo de código a continuación demuestra esto.
: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)
¿Por qué elegir AnyBitmap en lugar de las clases System.Drawing?
AnyBitmap ofrece compatibilidad superior entre plataformas en comparación con las clases Bitmap. Mientras que Bitmap tiene soporte limitado en plataformas no Windows en .NET 6+, AnyBitmap funciona perfectamente 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 mejor gestión de memoria y optimizaciones de rendimiento específicamente diseñadas para tareas de procesamiento de imágenes. Para obtener información detallada sobre compatibilidad, consulte nuestra documentación Compatibilidad.
¿Qué plataformas soporta AnyBitmap?
AnyBitmap soporta todas las plataformas principales donde .NET corre: 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 mediante la integración de recogida de basura automática y patrones de desecho explícitos. 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, previniendo 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 el uso general de memoria. 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, 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.
: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)
¿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 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, considera usar IronOCR para realizar un escaneo completo primero, luego analiza 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.
¿IronOCR soporta múltiples idiomas?
IronOCR soporta múltiples idiomas, convirtiéndose en una herramienta versátil para aplicaciones globales que requieren reconocimiento de texto en diferentes idiomas.
¿Puede integrarse IronOCR en aplicaciones existentes?
IronOCR está diseñado para integrarse fácilmente en aplicaciones existentes usando C#, permitiendo a los desarrolladores agregar funcionalidad de OCR a su software con un esfuerzo mínimo.
¿Cuáles son los beneficios de usar IronOCR para la gestión de documentos?
Usar IronOCR para la gestión de documentos agiliza el flujo de trabajo al convertir documentos escaneados en texto buscable y editable, reduciendo la necesidad de entrada manual de datos y mejorando la accesibilidad del documento.
¿Cómo puede IronOCR mejorar la precisión de los datos?
IronOCR mejora la precisión de los datos a través de sus algoritmos de reconocimiento avanzados y características de corrección de imágenes, asegurando que el proceso de extracción de texto sea tanto confiable como preciso.
¿Hay una prueba gratuita disponible para IronOCR?
Sí, Iron Software ofrece una prueba gratuita de IronOCR, permitiendo a los usuarios probar sus características y capacidades antes de tomar una decisión de compra.

