メインコンテンツへスキップ
このメソッドは、画像をページに分割する位置が存在する場合に、その位置を特定します。これは、書籍の見開きページを分割できるかどうかを検出するために使用されます。 画像を分割できる位置を特定するには:
  1. IFRPage::DetectOrientation メソッドを使用して、画像の向きを検出します。
  2. 返された TextOrientation オブジェクトを FindPageSplitPosition メソッドに渡します。
分割位置は 2 本の線で定義され、その座標は startSplitPosition パラメーターと endSplitPosition パラメーターで返されます。画像をページに分割する際は、これら 2 本の線の間にある画像領域を削除する必要があります。この領域には通常、何らかのごみが含まれます。

構文

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] 分割位置を定義する 1 本目の線の座標です (分割が可能な場合) 。この値の意味は、splitDirection 変数の値によって異なります。垂直分割の可能性が検出された場合、この値には分割線の水平座標が格納されます。水平分割の可能性が検出された場合、この値には分割線の垂直座標が格納されます。座標は、画像の傾き補正された白黒ページを基準に指定されます。 EndSplitPosition [out] 分割位置を定義する 2 本目の線の座標です (分割が可能な場合) 。この値の意味は、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;
 }
 // 画像を2つのページに分割
 // 画像サイズ
 int width = page.ImageDocument.ColorImage.Width;
 int height = page.ImageDocument.ColorImage.Height;
 // ページを複製
 frDoc.AddPage(page);
 FREngine.IFRPage secondPage = frDoc.Pages[frDoc.Pages.Count - 1];
 // 1つ目と2つ目のページを切り抜く
 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 プロファイルの操作