Vai al contenuto principale
Questo metodo individua la posizione in cui suddividere l’immagine in pagine, se esiste. Viene utilizzato per rilevare la possibilità di dividere le doppie pagine di un libro. Per trovare la posizione in cui l’immagine può essere divisa:
  1. Rilevare l’orientamento dell’immagine utilizzando il metodo IFRPage::DetectOrientation.
  2. Passare al metodo FindPageSplitPosition l’oggetto TextOrientation restituito.
La posizione di suddivisione è definita da due linee, le cui coordinate vengono restituite nei parametri startSplitPosition e endSplitPosition. L’area dell’immagine compresa tra queste due linee deve essere rimossa quando si suddivide l’immagine in pagine. Questa area di solito contiene del rumore.

Sintassi

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

Parametri

ExtractionParams [in] Oggetto ObjectsExtractionParams che memorizza i parametri di estrazione degli oggetti. Questo parametro può essere 0. In tal caso, gli oggetti vengono estratti con i parametri predefiniti oppure, se è stato caricato un profilo, vengono utilizzati i parametri definiti in tale profilo. TextOrientation [in] Fa riferimento all’oggetto TextOrientation, che specifica l’orientamento del testo nell’immagine. Se questo parametro è 0, ABBYY FineReader Engine presume che l’immagine abbia un orientamento normale. SplitDirection [out] Questa variabile riceve il tipo di possibile suddivisione: verticale, orizzontale oppure nessuna suddivisione. Per maggiori dettagli, vedere la descrizione di PageSplitDirectionEnum. StartSplitPosition [out] La coordinata della prima linea che definisce la posizione di suddivisione (se è possibile una suddivisione). Il significato di questo valore dipende dal valore della variabile splitDirection. Se viene rilevata la possibilità di una suddivisione verticale, contiene la coordinata orizzontale della linea di suddivisione. Se viene rilevata la possibilità di una suddivisione orizzontale, contiene la coordinata verticale della linea di suddivisione. La coordinata è riferita alla pagina in bianco e nero dell’immagine corretta dall’inclinazione. EndSplitPosition [out] La coordinata della seconda linea che definisce la posizione di suddivisione (se è possibile una suddivisione). Il significato di questo valore dipende dal valore della variabile splitDirection. Se viene rilevata la possibilità di una suddivisione verticale, contiene la coordinata orizzontale della linea di suddivisione. Se viene rilevata la possibilità di una suddivisione orizzontale, contiene la coordinata verticale della linea di suddivisione. La coordinata è riferita alla pagina in bianco e nero dell’immagine corretta dall’inclinazione.

Valori di ritorno

Questo metodo non ha valori di ritorno specifici. Restituisce i valori di ritorno standard delle funzioni di ABBYY FineReader Engine.

Esempi

private bool splitImage(FREngine.IFRPage page, FREngine.IFRDocument frDoc, FREngine.IPageProcessingParams ppp)
{
 int splitStartPosition = 0;
 int splitEndPosition = 0;
 bool isVerticalSplit = true;
 // Rileva l'orientamento del testo
 FREngine.ITextOrientation ori = page.DetectOrientation(null, ppp.ObjectsExtractionParams, ppp.RecognizerParams);
 // Individua la posizione di suddivisione
 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;
 }
 // Divide l'immagine in due pagine
 // Dimensioni dell'immagine
 int width = page.ImageDocument.ColorImage.Width;
 int height = page.ImageDocument.ColorImage.Height;
 // Duplica la pagina
 frDoc.AddPage(page);
 FREngine.IFRPage secondPage = frDoc.Pages[frDoc.Pages.Count - 1];
 // Ritaglia la prima e la seconda pagina
 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;
}

Vedi anche

FRPage DetectOrientation PageSplitDirectionEnum Uso dei profili