跳转到主要内容
如果存在,此方法会查找图像的页面拆分位置。它用于检测书籍中的对开页是否可以拆分。 要查找图像可拆分的位置:
  1. 使用 IFRPage::DetectOrientation 方法检测图像方向。
  2. 将返回的 TextOrientation 对象传递给 FindPageSplitPosition 方法。
拆分位置由两条线确定,其坐标通过 startSplitPosition 和 endSplitPosition 参数返回。将图像按页面拆分时,应移除这两条线之间的图像区域。该区域通常包含一些杂点。

语法

C++

HRESULT FindPageSplitPosition(
  IObjectsExtractionParams* ExtractionParams,
  ITextOrientation*         TextOrientation,
  PageSplitDirectionEnum*   SplitDirection,
  int*                      StartSplitPosition,
  int*                      EndSplitPosition
);

C#

void FindPageSplitPosition(
  IObjectsExtractionParams    ExtractionParams,
  ITextOrientation            TextOrientation,
  out PageSplitDirectionEnum SplitDirection,
  out int                    StartSplitPosition,
  out int                    EndSplitPosition
);

Visual Basic .NET

Sub FindPageSplitPosition( _
  ExtractionParams As IObjectsExtractionParams, _
  TextOrientation As TextOITextOrientationrientation, _
  ByRef SplitDirection As PageSplitDirectionEnum, _
  ByRef StartSplitPosition As Integer, _
  ByRef EndSplitPosition As Integer _
)

参数

ExtractionParams [in] 用于存储对象提取参数的 ObjectsExtractionParams 对象。此参数可以为 0。在这种情况下,将使用默认参数提取对象;或者,如果已加载 配置文件,则使用该配置文件中设置的参数。 TextOrientation [in] 指向 TextOrientation 对象,该对象指定图像中文本的方向。如果此参数为 0,ABBYY FineReader Engine 将假定图像方向正常。 SplitDirection [out] 此变量接收可能的拆分类型:垂直拆分、水平拆分或不拆分。有关详细信息,请参阅 PageSplitDirectionEnum 的说明。 StartSplitPosition [out] 定义拆分位置的第一条线的坐标 (如果可以拆分) 。此值的含义取决于 splitDirection 变量的值。如果检测到可以进行垂直拆分,则该值包含拆分线的水平坐标。如果检测到可以进行水平拆分,则该值包含拆分线的垂直坐标。坐标是相对于图像中经纠偏的黑白页面给出的。 EndSplitPosition [out] 定义拆分位置的第二条线的坐标 (如果可以拆分) 。此值的含义取决于 splitDirection 变量的值。如果检测到可以进行垂直拆分,则该值包含拆分线的水平坐标。如果检测到可以进行水平拆分,则该值包含拆分线的垂直坐标。坐标是相对于图像中经纠偏的黑白页面给出的。

返回值

此方法没有特定返回值。它会返回 ABBYY FineReader Engine 函数的标准返回值

示例

private bool splitImage(FREngine.IFRPage page, FREngine.IFRDocument frDoc, FREngine.IPageProcessingParams ppp)
{
 int splitStartPosition = 0;
 int splitEndPosition = 0;
 bool isVerticalSplit = true;
 // 检测文本方向
 FREngine.ITextOrientation ori = page.DetectOrientation(null, ppp.ObjectsExtractionParams, ppp.RecognizerParams);
 // 查找拆分位置
 FREngine.PageSplitDirectionEnum pageSplitDirection;
 page.FindPageSplitPosition(ppp.ObjectsExtractionParams, ori, out pageSplitDirection, out splitStartPosition, out splitEndPosition);
 if (pageSplitDirection == FREngine.PageSplitDirectionEnum.PSD_NoSplit)
 {
  return false;
 }
 else if (pageSplitDirection == FREngine.PageSplitDirectionEnum.PSD_HorizontalSplit)
 {
  isVerticalSplit = false;
 }
 // 将图像分割为两个页面
 // 图像尺寸
 int width = page.ImageDocument.ColorImage.Width;
 int height = page.ImageDocument.ColorImage.Height;
 // 复制页面
 frDoc.AddPage(page);
 FREngine.IFRPage secondPage = frDoc.Pages[frDoc.Pages.Count - 1];
 // 裁剪第一页和第二页
 FREngine.IImageModification firstModification = engine.CreateImageModification();
 FREngine.IRegion firstClipRegion = engine.CreateRegion();
 FREngine.IImageModification secondModification = engine.CreateImageModification();
 FREngine.IRegion secondClipRegion = engine.CreateRegion();
 if (isVerticalSplit)
 {
  firstClipRegion.AddRect(0, 0, splitStartPosition, height - 1 );
  secondClipRegion.AddRect(splitEndPosition, 0, width - 1, height - 1);
 }
 else
 {
  firstClipRegion.AddRect(0, 0, width - 1, splitStartPosition);
  secondClipRegion.AddRect(0, splitEndPosition, width - 1, height - 1);
 }
 firstModification.AddClipRegion(firstClipRegion);
 page.ImageDocument.Modify(firstModification);
 secondModification.AddClipRegion(secondClipRegion);
 secondPage.ImageDocument.Modify(secondModification);
 return true;
}

另请参见

FRPage DetectOrientation PageSplitDirectionEnum 使用配置文件