跳轉到主要內容
如果存在可分割的位置,此方法會找出可將影像分成頁面的分割位置。它用於偵測書籍中的對開頁是否可分割。 若要找出可分割影像的位置:
  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 設定檔的使用方式