Passer au contenu principal
Cette méthode recherche la position de séparation de l’image en pages, si elle existe. Elle sert à détecter s’il est possible de séparer des doubles pages dans un livre. Pour trouver la position à laquelle l’image peut être séparée :
  1. Détectez l’orientation de l’image à l’aide de la méthode IFRPage::DetectOrientation.
  2. Transmettez à la méthode FindPageSplitPosition l’objet TextOrientation renvoyé.
La position de séparation est définie par deux lignes, dont les coordonnées sont renvoyées dans les paramètres startSplitPosition et endSplitPosition. La zone de l’image située entre ces deux lignes doit être supprimée lors de la séparation de l’image en pages. Cette zone contient généralement des artéfacts.

Syntaxe

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

Paramètres

ExtractionParams [in] Objet ObjectsExtractionParams qui stocke les paramètres d’extraction des objets. Ce paramètre peut être égal à 0. Dans ce cas, les objets sont extraits avec les paramètres par défaut ou, si un profil a été chargé, avec les paramètres définis par ce profil. TextOrientation [in] Fait référence à l’objet TextOrientation, qui spécifie l’orientation du texte sur l’image. Si ce paramètre vaut 0, ABBYY FineReader Engine suppose que l’image a une orientation normale. SplitDirection [out] Cette variable reçoit le type de séparation possible : séparation verticale, séparation horizontale ou absence de séparation. Reportez-vous à la description de PageSplitDirectionEnum pour plus de détails. StartSplitPosition [out] Coordonnée de la première ligne qui définit la position de séparation (si une séparation est possible). La signification de cette valeur dépend de celle de la variable splitDirection. Si une séparation verticale possible est détectée, elle contient la coordonnée horizontale de la ligne de séparation. Si une séparation horizontale possible est détectée, elle contient la coordonnée verticale de la ligne de séparation. La coordonnée est donnée par rapport à la page noir et blanc redressée de l’image. EndSplitPosition [out] Coordonnée de la deuxième ligne qui définit la position de séparation (si une séparation est possible). La signification de cette valeur dépend de celle de la variable splitDirection. Si une séparation verticale possible est détectée, elle contient la coordonnée horizontale de la ligne de séparation. Si une séparation horizontale possible est détectée, elle contient la coordonnée verticale de la ligne de séparation. La coordonnée est donnée par rapport à la page noir et blanc redressée de l’image.

Valeurs de retour

Cette méthode n’a pas de valeurs de retour spécifiques. Elle renvoie les valeurs de retour standard des fonctions ABBYY FineReader Engine.

Exemples

private bool splitImage(FREngine.IFRPage page, FREngine.IFRDocument frDoc, FREngine.IPageProcessingParams ppp)
{
 int splitStartPosition = 0;
 int splitEndPosition = 0;
 bool isVerticalSplit = true;
 // Détecter l’orientation du texte
 FREngine.ITextOrientation ori = page.DetectOrientation(null, ppp.ObjectsExtractionParams, ppp.RecognizerParams);
 // Déterminer la position de séparation
 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;
 }
 // Scinder l’image en deux pages
 // Dimensions de l’image
 int width = page.ImageDocument.ColorImage.Width;
 int height = page.ImageDocument.ColorImage.Height;
 // Dupliquer la page
 frDoc.AddPage(page);
 FREngine.IFRPage secondPage = frDoc.Pages[frDoc.Pages.Count - 1];
 // Rogner la première et la seconde page
 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;
}

Voir aussi

FRPage DetectOrientation PageSplitDirectionEnum Utilisation des profils