메인 콘텐츠로 건너뛰기
이 메서드는 이미지에서 페이지를 분할할 위치가 있으면 그 위치를 찾습니다. 책의 펼침면을 두 페이지로 분할할 수 있는지 감지하는 데 사용됩니다. 이미지를 분할할 수 있는 위치를 찾으려면 다음과 같이 하십시오.
  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일 수 있습니다. 이 경우 객체는 기본 매개변수로 추출되거나, profile이 로드되어 있으면 해당 프로필에 설정된 매개변수가 사용됩니다. 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 프로필 작업