Methode GetNextImageFile der Schnittstelle IImageSource
Diese Methode ist in FRE für Linux und Windows implementiert.
Diese Methode wird auf der Clientseite implementiert. Sie gibt die nächste Bilddatei aus der Bildverarbeitungswarteschlange der Quelle zurück.
Wenn Sie unter Windows mit Bildern arbeiten, die bereits in den Speicher geladen wurden (z. B. wenn Sie die Methoden OpenBitmap oder OpenDib des Engine-Objekts verwenden), implementieren Sie GetNextImageDocument.
Eine Implementierung der Methode GetNextImageFile kann eine Wartezeit auf die nächste Bilddatei beinhalten. Wir empfehlen jedoch nicht, lange Wartezeiten zu implementieren, da FineReader Engine nicht multithreadfähig ist. Während des Wartens auf die nächste Datei kann die Engine keine Meldungen aus den Erkennungsprozessen verarbeiten und keine Benachrichtigungen darüber empfangen, dass bestimmte Seiten verarbeitet wurden. Wenn Sie dennoch eine lange Wartezeit angeben müssen, kann die Methode GetNextImageFile 0 zurückgeben. In diesem Fall verarbeitet die Engine weiterhin Meldungen aus den Erkennungsprozessen, stellt erkannte Bilder bereit und prüft nach einer Weile, ob die Bildwarteschlange leer ist. Wenn die Warteschlange nicht leer ist (d. h. wenn IImageSource::IsEmpty FALSE zurückgibt), ruft die Engine die Methode GetNextImageFile erneut auf. Wenn die Methode GetNextImageFile jedoch 0 zurückgibt und keine weiteren Seiten mehr zu verarbeiten sind, gibt FineReader Engine die Steuerung an den Benutzer zurück: Die Methode IBatchProcessor::GetNextProcessedPage gibt 0 zurück.
Die Implementierung des Clients für diese Methode muss sicherstellen, dass alle innerhalb der Methode auftretenden Ausnahmen abgefangen und behandelt werden und keine Ausnahme die Methode nach außen verlässt. Eine außerhalb der Methode propagierte Ausnahme kann zu unvorhersehbaren Ergebnissen führen (z. B. zur Beendigung des Programms).
// Beispiel für die Implementierung einer benutzerdefinierten Bildquelle, die eine Warteschlange von Bilddateien verwaltetpublic class ImageSourceCallback : FREngine.IImageSource{ public ImageSourceCallback( string imageFilesDirectory ) { imageFiles = ImageSourceHelper.LoadFilesNames( imageFilesDirectory ); nextFileIndex = 0; } public bool IsEmpty() { return nextFileIndex >= imageFiles.Length; } public FREngine.IFileAdapter GetNextImageFile() { if( !IsEmpty() ) { return new FileAdapterCallback( imageFiles[nextFileIndex++] ); } return null; } public FREngine.IImageDocument GetNextImageDocument() { ... } private string[] imageFiles; private int nextFileIndex;}public class FileAdapterCallback : FREngine.IFileAdapter{ ...}public class ImageSourceHelper{ ...}