Saltar al contenido principal
Este método determina la posición en la que la imagen puede dividirse en páginas, si existe. Se utiliza para detectar si es posible separar páginas dobles de un libro. Para encontrar la posición en la que se puede dividir la imagen:
  1. Detecte la orientación de la imagen mediante el método IFRPage::DetectOrientation.
  2. Pase el objeto TextOrientation devuelto al método FindPageSplitPosition.
La posición de división se define mediante dos líneas, cuyas coordenadas se devuelven en los parámetros startSplitPosition y endSplitPosition. El área de la imagen comprendida entre estas dos líneas debe eliminarse al dividir la imagen en páginas. Esta área suele contener ruido.

Sintaxis

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] El objeto ObjectsExtractionParams que almacena los parámetros de extracción de objetos. Este parámetro puede ser 0. En este caso, los objetos se extraen con los parámetros predeterminados o, si se ha cargado un perfil, se usan los parámetros definidos por ese perfil. TextOrientation [in] Hace referencia al objeto TextOrientation que especifica la orientación del texto en la imagen. Si este parámetro es 0, ABBYY FineReader Engine asume que la imagen tiene una orientación normal. SplitDirection [out] Esta variable recibe el tipo de posible división: división vertical, división horizontal o ninguna división. Consulte la descripción de PageSplitDirectionEnum para obtener más detalles. StartSplitPosition [out] La coordenada de la primera línea que define la posición de división (si es posible realizar una división). El significado de este valor depende del valor de la variable splitDirection. Si se detecta la posibilidad de una división vertical, contiene la coordenada horizontal de la línea de división. Si se detecta la posibilidad de una división horizontal, contiene la coordenada vertical de la línea de división. La coordenada se proporciona con respecto a la página en blanco y negro de la imagen, corregida en cuanto a la inclinación. EndSplitPosition [out] La coordenada de la segunda línea que define la posición de división (si es posible realizar una división). El significado de este valor depende del valor de la variable splitDirection. Si se detecta la posibilidad de una división vertical, contiene la coordenada horizontal de la línea de división. Si se detecta la posibilidad de una división horizontal, contiene la coordenada vertical de la línea de división. La coordenada se proporciona con respecto a la página en blanco y negro de la imagen, corregida en cuanto a la inclinación.

Valores de retorno

Este método no tiene valores de retorno específicos. Devuelve los valores de retorno estándar de las funciones de ABBYY FineReader Engine.

Ejemplos

private bool splitImage(FREngine.IFRPage page, FREngine.IFRDocument frDoc, FREngine.IPageProcessingParams ppp)
{
 int splitStartPosition = 0;
 int splitEndPosition = 0;
 bool isVerticalSplit = true;
 // Detectar la orientación del texto
 FREngine.ITextOrientation ori = page.DetectOrientation(null, ppp.ObjectsExtractionParams, ppp.RecognizerParams);
 // Buscar la posición de división
 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 la imagen en dos páginas
 // Dimensiones de la imagen
 int width = page.ImageDocument.ColorImage.Width;
 int height = page.ImageDocument.ColorImage.Height;
 // Duplicar la página
 frDoc.AddPage(page);
 FREngine.IFRPage secondPage = frDoc.Pages[frDoc.Pages.Count - 1];
 // Recortar la primera y la segunda páginas
 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;
}

Consulte también

FRPage DetectOrientation PageSplitDirectionEnum Trabajo con perfiles