Como ler objetos System.Drawing em C
O IronOCR permite a leitura de texto de objetos como System.Drawing e Bitmap e Image, envolvendo-os em OcrImageInput, proporcionando funcionalidade OCR perfeita para aplicações .NET em plataformas Windows, macOS e Linux.
System.Drawing.Bitmap é uma classe do .NET Framework usada para trabalhar com imagens bitmap. Ele fornece métodos e propriedades para criar, manipular e exibir imagens bitmap.
System.Drawing.Image é uma classe base para todos os objetos de imagem GDI+ no .NET Framework. É a classe pai para vários tipos de imagem, incluindo System.Drawing.Bitmap.
IronSoftware.Drawing.AnyBitmap é uma classe bitmap em IronDrawing , uma biblioteca de código aberto originalmente desenvolvida pela Iron Software. Isso ajuda os engenheiros de software C# a substituir System.Drawing.Common em projetos .NET nas plataformas Windows, macOS e Linux.
Início rápido: Ler texto de um System.Drawing.Bitmap
Com uma única instrução, crie um IronTesseract e alimente-o com um System.Drawing.Bitmap envolvido por OcrImageInput para extrair todo o texto. Este exemplo de início rápido demonstra como o IronOCR converte imagens em texto legível com configuração mínima.
-
Instale IronOCR com o Gerenciador de Pacotes NuGet
PM > Install-Package IronOcr -
Copie e execute este trecho de código.
var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png"))); -
Implante para testar em seu ambiente de produção.
Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita
Como ler objetos System.Drawing em C#
- Baixe uma biblioteca C# para leitura de objetos System.Drawing.
- Obtenha objetos System.Drawing, como
BitmapeImage - Construa a classe
OcrImageInputusando os dados adquiridos. - Utilize
AnyBitmapda Iron Software para Linux e macOS. - Defina a área de leitura especificando a região de recorte.
Como faço para ler um arquivo System.Drawing.Bitmap?
Primeiro, instancie a classe para realizar o OCR. Crie um a partir de um dos vários métodos. No exemplo de código, é utilizado um caminho de arquivo.
Em seguida, use a instrução para criar o objeto, passando a imagem do objeto para ele. Finalmente, use o método para realizar o 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 que a instrução using é importante para o OcrImageInput?
A instrução using é crucial ao trabalhar com OcrImageInput porque garante o gerenciamento adequado de recursos e a limpeza da memória. OcrImageInput implementa IDisposable, o que significa que mantém recursos não gerenciados que precisam ser liberados quando você terminar de usar o objeto. Sem a declaração using, esses recursos podem não ser liberados prontamente, podendo levar a vazamentos de memória ou bloqueios de arquivos. Isso é particularmente importante ao processar várias imagens em operações em lote. Para obter mais detalhes sobre o gerenciamento adequado de recursos no IronOCR, consulte nossa documentação de referência da API .
Quais são os métodos comuns de carregamento de Bitmaps?
Bitmap fornece vários métodos de carregamento além do construtor de caminho de arquivo usado em nosso exemplo. Você pode criar Bitmap a partir de fluxos (StreamReader), a partir de Image existentes (Image), ou até mesmo criar bitmaps em branco com dimensões específicas (Bitmap). Ao trabalhar com aplicações web, o carregamento a partir de fluxos de dados é particularmente útil para processar arquivos enviados. Para recursos incorporados, você pode usar Resources. O IronOCR lida com todas essas fontes source perfeitamente através do construtor Bitmap. Saiba mais sobre os diferentes métodos de entrada em nosso guia de Imagens (jpg, png, gif, tiff, bmp) .
Quando devo descartar o objeto Bitmap?
O momento de descarte do bitmap depende do fluxo de trabalho do seu aplicativo. Se você precisar apenas do bitmap para OCR, descarte-o imediatamente após criar o ocrResult. No entanto, se precisar realizar várias operações ou exibir a imagem, mantenha o navegador ativo até que todas as operações sejam concluídas. Use sempre instruções using ou blocos try-finally para garantir o descarte. Lembre-se que OcrImageInput cria sua própria cópia interna, então o bitmap original pode ser descartado após a criação de OcrImageInput. Para cenários complexos que envolvem múltiplas operações de imagem, considere nossos exemplos de Filtros de Otimização de Imagem OCR .
Como faço para ler um arquivo System.Drawing.Image?
Ler de um Image é tão simples quanto criar o objeto OcrInput com o Image e então executar o processo OCR padrão usando o 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)
Qual a diferença entre Imagem e Bitmap para OCR?
Enquanto Bitmap é uma implementação específica para imagens bitmap, Image é uma classe base abstrata que pode representar vários formatos de imagem, incluindo JPEG, PNG, GIF e TIFF. Para fins de OCR, o IronOCR trata ambos de forma idêntica através de OcrInput, mas Image oferece mais flexibilidade ao trabalhar com formatos diferentes. Bitmap oferece recursos de manipulação em nível de pixel, enquanto Image é melhor para manipulação geral de imagens. Ambos funcionam igualmente bem com o mecanismo avançado Tesseract 5 do IronOCR. A escolha depende das suas necessidades de aplicação em geral, e não do desempenho do OCR.
Por que usar Image.FromFile em vez de outros métodos de carregamento?
Image.FromFile é o método mais simples e direto para carregar imagens do disco. Ele detecta automaticamente o formato da imagem e gerencia o processo de leitura do arquivo. Métodos alternativos como MemoryStream são melhores para aplicações web ou quando se trabalha com fluxos de memória. FileStream bloqueia o arquivo até que o FileStream seja descartado, o que pode ser uma consideração em aplicações multithread. Para cenários de produção que exigem alto desempenho ou acesso simultâneo, considere carregar as imagens em fluxos de memória primeiro. Nosso exemplo de OCR Tesseract multithread demonstra as melhores práticas para processamento simultâneo de imagens.
Como faço para ler um arquivo IronSoftware.Drawing.AnyBitmap?
Da mesma forma, após criar ou obter um objeto AnyBitmap, você pode construir a classe OcrInput. O construtor irá lidar com todas as etapas necessárias para importar os dados. O exemplo de código abaixo demonstra isso.
: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 que escolher AnyBitmap em vez das classes System.Drawing?
AnyBitmap oferece compatibilidade multiplataforma superior em comparação com as classes Bitmap. Embora o Bitmap tenha suporte limitado em plataformas que não sejam Windows no .NET 6+, o AnyBitmap funciona perfeitamente no Windows, Linux e macOS. Ela fornece uma API consistente sem dependências específicas de plataforma, tornando-a ideal para implantações em nuvem e aplicativos conteinerizados. AnyBitmap também oferece melhor gerenciamento de memória e otimizações de desempenho projetadas especificamente para tarefas de processamento de imagem. Para obter informações detalhadas sobre compatibilidade, consulte nossa documentação de compatibilidade .
Quais plataformas o AnyBitmap suporta?
O AnyBitmap é compatível com todas as principais plataformas onde o .NET é executado: Windows (x86, x64, ARM), Linux (incluindo Alpine Linux para Docker) e macOS (Intel e Apple Silicon). Essa ampla compatibilidade com plataformas faz dele a escolha recomendada para aplicações .NET modernas que precisam ser executadas em diversos ambientes. É particularmente valioso para implantações em nuvem no AWS Lambda ou no Azure Functions. Saiba mais sobre a configuração específica da plataforma em nossos guias para ambientes Linux , macOS e Docker .
Como o AnyBitmap gerencia a memória?
AnyBitmap implementa gerenciamento de memória eficiente por meio da integração de coleta automática de lixo e padrões de descarte explícitos. Ele utiliza o agrupamento de memória para buffers alocados com frequência e implementa a semântica de cópia sob demanda (copy-on-write) para melhor desempenho. Ao contrário do AnyBitmap, que pode manter bloqueios de arquivos, o AnyBitmap carrega as imagens completamente na memória, evitando problemas de acesso aos arquivos. Isso também proporciona um melhor controle sobre o uso da memória em cenários de alto desempenho. Para aplicações que processam grandes volumes de imagens, a eficiência de memória do AnyBitmap pode reduzir significativamente a ocupação total de memória. Consulte nosso guia System.Drawing.Common Alternatives para dicas de migração.
Como posso especificar uma região de varredura?
Na construção da classe OcrInput, você pode especificar a área a ser escaneada. Isso permite definir a região específica do documento de imagem para OCR. Dependendo do documento de imagem, especificar a região de digitalização pode melhorar significativamente o desempenho. No exemplo de código fornecido, apenas o número e o título do capítulo são extraídos.
: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)
Quando devo usar a varredura de região para obter melhor desempenho?
A digitalização regional melhora drasticamente o desempenho quando você precisa apenas de texto de áreas específicas em layouts de documentos consistentes. Os casos de uso comuns incluem a extração de cabeçalhos, campos de formulário, totais de faturas ou informações de cartões de identificação. Os ganhos de desempenho são mais significativos com imagens grandes, onde o texto ocupa uma pequena porção. Para uma fatura de 3000x4000 pixels, digitalizar apenas a região do valor total pode ser de 10 a 20 vezes mais rápido do que o OCR de página inteira. A varredura regional também melhora a precisão, eliminando possíveis ruídos de outras áreas. Para mais exemplos baseados em regiões, consulte nosso guia Áreas de Conteúdo e Regiões de Cultivo com PDFs .
Como faço para determinar as coordenadas corretas para minha região?
Determinar coordenadas requer entender que Rectangle usa o formato (X, Y, Largura, Altura), onde (0,0) é o canto superior esquerdo. Comece abrindo sua imagem em um editor de imagens que exiba as coordenadas do cursor. Como alternativa, utilize os recursos de depuração do IronOCR para visualizar as regiões de texto detectadas. Para layouts dinâmicos, considere usar o IronOCR para realizar uma digitalização completa primeiro e, em seguida, analisar o OcrResult para encontrar as posições do texto programaticamente. Nosso exemplo "Textos Destacados para Depuração" mostra como visualizar regiões de OCR para uma determinação precisa de coordenadas.
O que acontece se a região ultrapassar os limites da imagem?
Quando uma região específica ultrapassa os limites da imagem, o IronOCR a recorta automaticamente para se ajustar à área válida da imagem. Por exemplo, se sua imagem tiver 1000x1000 pixels e você especificar um retângulo em (900, 900, 200, 200), o IronOCR processará apenas a área de (900, 900) a (1000, 1000). Esse recorte automático evita erros, mas pode resultar em extração de texto incompleta se suas coordenadas estiverem incorretas. Sempre verifique se suas regiões correspondem às dimensões reais da imagem. Para tamanhos de imagem dinâmicos, calcule as regiões como porcentagens em vez de pixels fixos. O guia "Região OCR de uma Imagem" fornece mais exemplos de como lidar com regiões de forma segura.
Resultado do 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
Perguntas frequentes
Como extrair texto de um System.Drawing.Bitmap usando OCR em C#?
O IronOCR facilita a extração de texto de objetos System.Drawing.Bitmap. Primeiro, instancie a classe IronTesseract, depois envolva seu Bitmap em um objeto OcrImageInput usando uma instrução using e, finalmente, chame o método Read. O código mínimo é: var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap));
Por que a instrução `using` é importante ao trabalhar com `OcrImageInput`?
A declaração `using` é crucial porque `OcrImageInput` implementa `IDisposable` e mantém recursos não gerenciados que precisam de limpeza adequada. Sem ela, você corre o risco de vazamentos de memória ou bloqueios de arquivos, especialmente ao processar várias imagens. O `OcrImageInput` do IronOCR requer o descarte adequado para garantir o gerenciamento eficiente de recursos em seus aplicativos .NET.
Posso realizar OCR em objetos System.Drawing.Image?
Sim, o IronOCR suporta OCR em objetos System.Drawing.Image, já que Image é a classe base para Bitmap. Basta envolver seu objeto Image em OcrImageInput da mesma forma que você faria com um Bitmap, e o IronOCR extrairá o texto perfeitamente em plataformas Windows, macOS e Linux.
O que é IronSoftware.Drawing.AnyBitmap e como se relaciona com OCR?
IronSoftware.Drawing.AnyBitmap é uma classe bitmap da biblioteca IronDrawing, de código aberto, que ajuda a substituir System.Drawing.Common em projetos .NET. Ela oferece compatibilidade multiplataforma com Windows, macOS e Linux, sendo ideal para uso com o IronOCR quando você precisa de um processamento de imagem consistente em diferentes sistemas operacionais.
Posso especificar uma área específica de uma imagem para extração de texto?
Sim, o IronOCR permite definir áreas de leitura específicas especificando regiões de recorte. Esse recurso permite concentrar o processamento de OCR em seções específicas dos seus objetos System.Drawing, melhorando o desempenho e a precisão quando você precisa apenas do texto de partes específicas de uma imagem.
O IronOCR suporta vários idiomas?
O IronOCR suporta múltiplos idiomas, tornando-se uma ferramenta versátil para aplicações globais que requerem reconhecimento de texto em diferentes idiomas.
O IronOCR pode ser integrado em aplicações existentes?
O IronOCR é projetado para ser facilmente integrado em aplicações existentes usando C#, permitindo que os desenvolvedores adicionem funcionalidades de OCR ao seu software com esforço mínimo.
Quais são os benefícios de usar o IronOCR para gestão de documentos?
Usar o IronOCR para gestão de documentos simplifica o fluxo de trabalho convertendo documentos escaneados em texto pesquisável e editável, reduzindo a necessidade de inserção manual de dados e melhorando a acessibilidade dos documentos.
Como o IronOCR pode melhorar a precisão dos dados?
O IronOCR melhora a precisão dos dados através de seus algoritmos avançados de reconhecimento e recursos de correção de imagem, assegurando que o processo de extração de texto seja tanto confiável quanto preciso.
Há uma avaliação gratuita disponível para o IronOCR?
Sim, o Iron Software oferece uma avaliação gratuita do IronOCR, permitindo que os usuários testem seus recursos e capacidades antes de tomar uma decisão de compra.

