Pular para o conteúdo principal
Este método localiza a posição de separação da imagem em páginas, se ela existir. Ele é usado para detectar a possibilidade de separar páginas duplas em um livro. Para localizar a posição em que a imagem pode ser separada:
  1. Detecte a orientação da imagem usando o método IFRPage::DetectOrientation.
  2. Passe o objeto TextOrientation retornado para o método FindPageSplitPosition.
A posição de separação é definida por duas linhas, cujas coordenadas são retornadas nos parâmetros startSplitPosition e endSplitPosition. A área da imagem entre essas duas linhas deve ser removida ao separar a imagem em páginas. Essa área geralmente contém ruído.

Sintaxe

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 _
)

Parâmetros

ExtractionParams [in] O objeto ObjectsExtractionParams que armazena os parâmetros de extração de objetos. Esse parâmetro pode ser 0. Nesse caso, os objetos são extraídos com os parâmetros padrão ou, se um profile tiver sido carregado, são usados os parâmetros definidos por esse perfil. TextOrientation [in] Refere-se ao objeto TextOrientation, que especifica a orientação do texto na imagem. Se esse parâmetro for 0, o ABBYY FineReader Engine presume que a imagem tem orientação normal. SplitDirection [out] Essa variável recebe o tipo de divisão possível: divisão vertical, divisão horizontal ou nenhuma divisão. Consulte a descrição de PageSplitDirectionEnum para obter detalhes. StartSplitPosition [out] A coordenada da primeira linha que define a posição da divisão (se uma divisão for possível). O significado desse valor depende do valor da variável splitDirection. Se a possibilidade de divisão vertical for detectada, ele conterá a coordenada horizontal da linha de divisão. Se a possibilidade de divisão horizontal for detectada, ele conterá a coordenada vertical da linha de divisão. A coordenada é fornecida em relação à página em preto e branco da imagem, corrigida quanto à inclinação. EndSplitPosition [out] A coordenada da segunda linha que define a posição da divisão (se uma divisão for possível). O significado desse valor depende do valor da variável splitDirection. Se a possibilidade de divisão vertical for detectada, ele conterá a coordenada horizontal da linha de divisão. Se a possibilidade de divisão horizontal for detectada, ele conterá a coordenada vertical da linha de divisão. A coordenada é fornecida em relação à página em preto e branco da imagem, corrigida quanto à inclinação.

Valores de retorno

Este método não tem valores de retorno específicos. Ele retorna os valores de retorno padrão das funções do ABBYY FineReader Engine.

Exemplos

private bool splitImage(FREngine.IFRPage page, FREngine.IFRDocument frDoc, FREngine.IPageProcessingParams ppp)
{
 int splitStartPosition = 0;
 int splitEndPosition = 0;
 bool isVerticalSplit = true;
 // Detectar a orientação do texto
 FREngine.ITextOrientation ori = page.DetectOrientation(null, ppp.ObjectsExtractionParams, ppp.RecognizerParams);
 // Localizar a posição da divisão
 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;
 }
 // Dividir a imagem em duas páginas
 // Dimensões da imagem
 int width = page.ImageDocument.ColorImage.Width;
 int height = page.ImageDocument.ColorImage.Height;
 // Duplicar a página
 frDoc.AddPage(page);
 FREngine.IFRPage secondPage = frDoc.Pages[frDoc.Pages.Count - 1];
 // Recortar a primeira página e a segunda
 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;
}

Veja também

FRPage DetectOrientation PageSplitDirectionEnum Trabalhando com Perfis