ABBYY FineReader Engine 通过将图像加载到 FRDocument 对象中来处理图像,该对象用于表示正在处理的文档。
要将图像加载到文档中,请执行以下任一操作:
所有这些方法都接收 PrepareImageMode 对象作为参数,您可以用它指定图像预处理的各项参数。调用 IEngine::CreatePrepareImageMode 方法创建此对象,根据需要修改其属性,然后将其传递给上述任一方法。
您还可以使用 FRDocument 对象的 AddImageDocument 方法添加现有的 ImageDocument 对象 (例如,从内部格式文件加载的对象) 。
图像加载到文档后,可通过 IFRPage::ImageDocument 属性访问每一页的图像。在 ABBYY FineReader Engine 中,每个打开的图像都由一个 ImageDocument 对象表示。ImageDocument 以所谓的“内部格式”存储图像,其中包含 4 个图像平面,分别由 Image 对象表示:
- 黑白平面。它是源图像的黑白副本。
- 灰度平面。它是源图像的灰度副本。如果源图像是黑白图像,则该平面与黑白平面相同。
- 彩色平面。它是源图像的彩色副本。如果源图像是黑白图像,则该平面与黑白平面相同;如果源图像是灰度图像,则该平面与灰度平面相同。
- 预览平面。它是一个较小的彩色图像,用于在用户界面中显示预览。预览会在调用 GetPreviewImage 或 GetPreviewImageSpecificSize 方法时创建。对图像的任何修改,无论是自动还是手动,都可能重置已创建的预览,因此需要重新创建。
黑白、灰度和彩色图像的尺寸和分辨率相同。预览图像通常较小。
图像在打开时可能会进行纠偏。要将原始图像上的坐标与打开后或进一步修改后的坐标对应起来,请使用 CoordinatesConverter 对象。该对象会保存获取它时的坐标状态。可使用此对象在图像处理的任意两个阶段之间转换像素坐标。例如:
- 图像打开后立即通过 IImageDocument::CoordinatesConverter 属性获取此对象,此时图像偏斜已校正。
- 完成其他修改后,再从 ImageDocument 获取该对象的另一个实例。
- 现在,可以通过两次应用 ConvertCoordinates 方法,在初始纠偏后的图像平面与修改后的图像平面之间转换像素坐标:
- 使用 CoordinatesConverter 的第一个实例,将坐标从纠偏后的图像平面转换到原始图像平面。
- 使用 CoordinatesConverter 的第二个实例,将结果从原始图像平面转换到修改后的图像平面。
同一方法还可用于在任一全尺寸图像平面与预览图像平面之间双向转换像素坐标。黑白、灰度和彩色图像平面上的像素坐标是相同的。
对图像的修改 (无论是自动还是手动) 都可能重置先前创建的预览图像平面,因此将无法将坐标转换到该预览图像,或从该预览图像转换坐标。如果图像已被修改,请在转换坐标前再次调用 GetPreviewImage 方法。
自动预处理机制最适合用于为 OCR 准备图像。程序会确定图像来源和文档类型,检测方向、分辨率或图像倾斜是否有误,并综合考虑这些数据来优化图像。建议仅在自动预处理后您仍对结果不满意时,再进行额外的图像修改。
图像打开过程中的修改由 PrepareImageMode 对象管理。
打开后,可以使用以下方式修改图像:
您可以使用 Image 对象的 WriteToFile 方法,将当前图像平面以指定格式保存到图像文件中。
ABBYY FineReader Engine 还支持将多个图像保存到同一个图像文件中。要保存多页图像文件,请使用 MultipageImageWriter 对象:
- 使用 Engine 对象的 CreateMultipageImageWriter 方法创建一个 MultipageImageWriter 对象。
- 使用 MultipageImageWriter 对象的 AddPage 方法,将图像添加到多页图像文件末尾。每个图像都会作为单独的一个页面添加。
- 在新创建的图像文件可供使用之前,必须释放对 MultipageImageWriter 对象的所有引用。
请注意,虽然 ImageDocument 对象提供了一组保存方法 (SaveTo、SaveToFile、SaveToMemory) ,但这些方法不能用于将图像保存为外部格式。它们会以 ABBYY FineReader Engine 内部格式保存 ImageDocument 对象的内容,而这种格式无法在任何外部程序中查看。
支持的图像格式