如何在C#中从内存中的图像提取文本
直接使用Bitmap变量实现IronTesseract文本提取
你的问题出在错误创建了myBitmap对象,new Bitmap(bm.Width, bm.Height, gr)这个构造函数并不会复制截图内容,而是生成一个关联指定Graphics的空Bitmap,传递空对象自然无法识别文本。
直接使用截图得到的bm对象即可实现无文件依赖的OCR,无需额外创建新Bitmap,也不需要保存图像到本地。以下是修正后的完整代码:
using (var bm = new Bitmap(680, 280)) { using (var gr = Graphics.FromImage(bm)) { // 捕获屏幕区域到bm对象 gr.CopyFromScreen(-1355, 430, 0, 0, bm.Size); // 初始化OCR引擎 var Ocr = new IronTesseract { Language = OcrLanguage.French }; // 直接使用bm对象作为输入 using (var Input = new OcrInput()) { Input.AddImage(bm); // 这里直接传入截图得到的Bitmap OcrResult Result = Ocr.Read(Input); MessageBox.Show(Result.Text); } } }
关键说明
- 移除了
bm.Save()和错误的myBitmap创建步骤,直接复用截图生成的bm对象 OcrInput.AddImage()本身支持接收Bitmap类型参数,无需先转存为文件- 确保所有实现
IDisposable的对象(Bitmap、Graphics、IronTesseract、OcrInput)都用using语句包裹,避免资源泄漏
内容的提问来源于stack exchange,提问作者Agfasion
相关产品推荐
相关产品推荐

