←Select platform

SetOverlayImage Method

Summary
Sets the overlay image of this IOcrPage
Syntax
C#
VB
Objective-C
C++
Java
public void SetOverlayImage( 
   RasterImage image 
) 
Sub SetOverlayImage( _ 
   ByVal image As RasterImage _ 
)  
- (void)setOverlayImage:(LTRasterImage *)image error:(NSError **)error 
public void setOverlayImage(RasterImage value) 
void SetOverlayImage(  
   RasterImage^ image 
)  

Parameters

image
The overlay image. This value can be null.

Remarks

The overlay image of an IOcrPage will be used when the image is saved by an IOcrDocument in the following situations:

  • If the page contains a graphics zone (OcrZoneType.Graphics. The document will get the image to store in the document from the overlay image.

  • If the output format supports the "Image over text" feature. Such as PDF with Image/Text option. The document will get the image to store in the document from the overlay image.

By the default, the overlay image is the original image used to create the page. It is the same value obtained by calling GetRasterImage with OcrPageType.Original.

In some situation, the user might want use a different image as the overlay. For example, a smaller version is passed to the OCR engine to conserve memory while the original version will only be used on save purposes in a PDF with image/text option. You can call SetOverlayImage before saving the document (memory-based) or adding the page to the document (file-based) and the engine will use this new image as the overlay value. If auto-preprocessing was performed on the page through AutoPreprocess, then the same values might need to be applied to the overlay as well. Use GetPreprocessValues to get the accumulative values of any inversion, rotation or deskewing applied by the pre-processor.

To clear the temporarily overlay image, call SetOverlayImage with a null value.

To get the overlay image at any time, call GetOverlayImage. Note that this property will the same image reference passed to the last SetOverlayImage call. It will not return the original image.

The overlay image is not disposed by this IOcrPage.

Example
C#
VB
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.Ocr; 
using Leadtools.Forms.Common; 
using Leadtools.Document.Writer; 
using Leadtools.WinForms; 
using Leadtools.Drawing; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Color; 
 
public static void SetOverlayImageExample() 
{ 
   var originalFileName = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.tif"); 
   var imageFileName = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1_Deskewed.tif"); 
   var outFileName = Path.Combine(LEAD_VARS.ImagesDir, "result.pdf"); 
 
   using (var ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)) 
   { 
      ocrEngine.Startup(null, null, null, LEAD_VARS.OcrLEADRuntimeDir); 
 
      // Mimic having an image that is de-skewed 
      using (var rasterImage = ocrEngine.RasterCodecsInstance.Load(originalFileName, 1)) 
      { 
         // Rotate the image by 5 degrees to mimic deskew 
         var rotateCommand = new RotateCommand(5 * 100, RotateCommandFlags.None, RasterColor.FromKnownColor(RasterKnownColor.White)); 
         rotateCommand.Run(rasterImage); 
         ocrEngine.RasterCodecsInstance.Save(rasterImage, imageFileName, RasterImageFormat.CcittGroup4, 1); 
      } 
 
      // Now we are ready. We will create a PDF for the result with image over text overlay. And we will intercept creating 
      // the overlay and use the original image instead 
 
      // Use PDF with image/text option 
      var pdfOptions = ocrEngine.DocumentWriterInstance.GetOptions(DocumentFormat.Pdf) as PdfDocumentOptions; 
      pdfOptions.ImageOverText = true; 
      ocrEngine.DocumentWriterInstance.SetOptions(DocumentFormat.Pdf, pdfOptions); 
 
      // Create an OCR AutoRecognize job 
      var jobData = new OcrAutoRecognizeJobData 
      { 
         ImageFileName = imageFileName, 
         FirstPageNumber = 1, 
         LastPageNumber = -1, 
         DocumentFileName = outFileName, 
         Format = DocumentFormat.Pdf 
      }; 
 
      var autoRecognizeManager = ocrEngine.AutoRecognizeManager; 
      var job = autoRecognizeManager.CreateJob(jobData); 
 
      // Setup pre-processing commands 
      autoRecognizeManager.EnableTrace = true; 
      autoRecognizeManager.PreprocessPageCommands.Clear(); 
      autoRecognizeManager.PreprocessPageCommands.Add(OcrAutoPreprocessPageCommand.All); 
      OcrAutoRecognizeManagerJobStatus status; 
 
      EventHandler<OcrAutoRecognizeJobOperationEventArgs> jobOperation = (sender, e) => 
      { 
         if (e.Operation == OcrAutoRecognizeManagerJobOperation.SavePage) 
         { 
            if (!e.PostOperation) 
            { 
               // Get the pre-processing values for the page 
               var values = e.Page.GetPreprocessValues(); 
               // Show the status of it 
               Console.WriteLine("Page:{0} IsInverted:{1} RotationAngle:{2} DeskewAngle{3}", e.ImagePageNumber, values.IsInverted, values.RotationAngle, values.DeskewAngle); 
 
               // Load the original image from disk 
               var overlayImage = e.Document.RasterCodecsInstance.Load(e.Job.JobData.ImageFileName, e.ImagePageNumber); 
 
               // Apply to the image 
               if (values.RotationAngle != 0) 
                  new RotateCommand(values.RotationAngle, RotateCommandFlags.None, RasterColor.FromKnownColor(RasterKnownColor.White)).Run(overlayImage); 
               if (values.IsInverted) 
                  new InvertCommand().Run(overlayImage); 
 
               e.Page.SetOverlayImage(overlayImage); 
            } 
         } 
      }; 
 
      autoRecognizeManager.JobOperation += jobOperation; 
 
      try 
      { 
         status = autoRecognizeManager.RunJob(job); 
      } 
      finally 
      { 
         autoRecognizeManager.JobOperation -= jobOperation; 
      } 
 
      Console.WriteLine(status); 
   } 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS21\Resources\Images"; 
   public const string OcrLEADRuntimeDir = @"C:\LEADTOOLS21\Bin\Common\OcrLEADRuntime"; 
} 
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.Ocr 
Imports Leadtools.Forms 
Imports Leadtools.Document.Writer 
Imports Leadtools.WinForms 
Imports Leadtools.Drawing 
Imports Leadtools.ImageProcessing 
Imports Leadtools.ImageProcessing.Color 
 
Public Shared Sub SetOverlayImageExample() 
   Dim originalFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.tif") 
   Dim imageFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Ocr1_Deskewed.tif") 
   Dim outFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "result.pdf") 
 
   Using ocrEngine As IOcrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD) 
      ocrEngine.Startup(Nothing, Nothing, Nothing, LEAD_VARS.OcrLEADRuntimeDir) 
 
      ' Mimimc having an image that is deskewed 
      Using rasterImage As RasterImage = ocrEngine.RasterCodecsInstance.Load(originalFileName, 1) 
         ' Rotate the image by 5 degrees to mimic deskew 
         Dim rotateCommand As New RotateCommand(5 * 100, RotateCommandFlags.None, RasterColor.FromKnownColor(RasterKnownColor.White)) 
         rotateCommand.Run(rasterImage) 
         ocrEngine.RasterCodecsInstance.Save(rasterImage, imageFileName, RasterImageFormat.CcittGroup4, 1) 
      End Using 
 
      ' Now we are ready. We will create a PDF for the result with image over text overlay. And we will intercept creating 
      ' the overlay and use the original image instead 
 
      ' Use PDF with image/text option 
      Dim pdfOptions As PdfDocumentOptions = DirectCast(ocrEngine.DocumentWriterInstance.GetOptions(DocumentFormat.Pdf), PdfDocumentOptions) 
      pdfOptions.ImageOverText = True 
      ocrEngine.DocumentWriterInstance.SetOptions(DocumentFormat.Pdf, pdfOptions) 
 
      ' Create an OCR AutoRecognize job 
      Dim jobData As New OcrAutoRecognizeJobData 
      jobData.ImageFileName = imageFileName 
      jobData.FirstPageNumber = 1 
      jobData.LastPageNumber = -1 
      jobData.DocumentFileName = outFileName 
      jobData.Format = DocumentFormat.Pdf 
 
      Dim autoRecognizeManager As IOcrAutoRecognizeManager = ocrEngine.AutoRecognizeManager 
      Dim job As IOcrAutoRecognizeJob = autoRecognizeManager.CreateJob(jobData) 
 
      ' Setup pre-processing commands 
      autoRecognizeManager.EnableTrace = True 
      autoRecognizeManager.PreprocessPageCommands.Clear() 
      autoRecognizeManager.PreprocessPageCommands.Add(OcrAutoPreprocessPageCommand.All) 
      Dim status As OcrAutoRecognizeManagerJobStatus 
 
      Dim jobOperation As EventHandler(Of OcrAutoRecognizeJobOperationEventArgs) = 
         Sub(sender As Object, e As OcrAutoRecognizeJobOperationEventArgs) 
            If e.Operation = OcrAutoRecognizeManagerJobOperation.SavePage Then 
               If Not e.PostOperation Then 
                  ' Get the pre-processing values for the page 
                  Dim values As OcrPageAutoPreprocessValues = e.Page.GetPreprocessValues() 
                  ' Show the status of it 
                  Console.WriteLine("Page:{0} IsInverted:{1} RotationAngle:{2} DeskewAngle{3}", e.ImagePageNumber, values.IsInverted, values.RotationAngle, values.DeskewAngle) 
 
                  ' Load the original image from disk 
                  Dim overlayImage As RasterImage = e.Document.RasterCodecsInstance.Load(e.Job.JobData.ImageFileName, e.ImagePageNumber) 
 
                  ' Apply to the image 
                  If values.RotationAngle <> 0 Then 
                     Dim rotateCmd As New RotateCommand(values.RotationAngle, RotateCommandFlags.None, RasterColor.FromKnownColor(RasterKnownColor.White)) 
                     rotateCmd.Run(overlayImage) 
                  End If 
                  If (values.IsInverted) Then 
                     Dim invertCmd As New InvertCommand() 
                     invertCmd.Run(overlayImage) 
                  End If 
 
                  e.Page.SetOverlayImage(overlayImage) 
               End If 
            End If 
         End Sub 
 
      AddHandler autoRecognizeManager.JobOperation, jobOperation 
 
      Try 
         status = autoRecognizeManager.RunJob(job) 
      Finally 
         RemoveHandler autoRecognizeManager.JobOperation, jobOperation 
      End Try 
 
      Console.WriteLine(status) 
   End Using 
End Sub 
 
Public NotInheritable Class LEAD_VARS 
   Public Const ImagesDir As String = "C:\LEADTOOLS21\Resources\Images" 
   Public Const OcrLEADRuntimeDir As String = "C:\LEADTOOLS21\Bin\Common\OcrLEADRuntime" 
End Class 
Requirements

Target Platforms

Help Version 21.0.2021.7.2
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2021 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Ocr Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2021 LEAD Technologies, Inc. All Rights Reserved.