public NativeOcrZoneFillMethod FillMethod { get; set; }
An NativeOcrZoneFillMethod enumeration member that indicates the zone fill method.
The FillMethod property is used to define what kind of zone filling method has been used originally on the document to fill the zone's area. (i.e. whether it contains a barcode, machine print, handprint, graphic, etc.).
The RecognitionModule property specifies the recognition module to be used for this zone.
Since any recognition module supports only a limited set of the zone filling methods, the module specified in RecognitionModule should be able to deal with the specified NativeOcrZoneFillMethod. It is your responsibility to specify a valid recognition module-filling method pair. Otherwise any incorrectly set zone will have no recognition result.
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 void OcrAutoZoneExample()
{
// Create an image with some text in it
RasterImage image = new RasterImage(RasterMemoryFlags.Conventional, 320, 200, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, null, IntPtr.Zero, 0);
Rectangle imageRect = new Rectangle(0, 0, image.ImageWidth, image.ImageHeight);
IntPtr hdc = RasterImagePainter.CreateLeadDC(image);
using (Graphics g = Graphics.FromHdc(hdc))
{
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.FillRectangle(Brushes.White, imageRect);
using (Font f = new Font("Arial", 20, FontStyle.Regular))
g.DrawString("Normal line", f, Brushes.Black, 0, 0);
using (Font f = new Font("Courier New", 20, FontStyle.Regular))
g.DrawString("Monospaced line", f, Brushes.Black, 0, 80);
}
RasterImagePainter.DeleteLeadDC(hdc);
string zonesFileName = Path.Combine(LEAD_VARS.ImagesDir, "MyZones.xml");
// Create an instance of the engine
using (IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD))
{
// Start the engine using default parameters
ocrEngine.Startup(null, null, null, LEAD_VARS.OcrLEADRuntimeDir);
// Create an OCR page
using (IOcrPage ocrPage = ocrEngine.CreatePage(image, OcrImageSharingMode.AutoDispose))
{
// Show the zones, there should be no zones yet
ShowZones("Right after the page was created", ocrPage);
// Perform default AutoZoning on the page
ocrPage.AutoZone(null);
// Show the zones, there should be two zones, one for each line
ShowZones("AutoZone with default parameters", ocrPage);
// Update the first zone manually
OcrZone ocrZone = ocrPage.Zones[0];
ocrZone.ZoneType = OcrZoneType.Text;
ocrPage.Zones[0] = ocrZone;
// Show the zones
ShowZones("After updating the type of the first zone", ocrPage);
// Save the zones to a file and then clear them
ocrPage.SaveZones(zonesFileName);
ocrPage.Zones.Clear();
// Show the zones, there should be no zones since we just cleared them
ShowZones("After calling save and clear", ocrPage);
// Re-load the zones
ocrPage.LoadZones(zonesFileName);
ShowZones("After re-loading the zones", ocrPage);
}
// Shutdown the engine
// Note: calling Dispose will also automatically shutdown the engine if it has been started
ocrEngine.Shutdown();
}
}
private void ShowZones(string message, IOcrPage ocrPage)
{
Console.WriteLine("Zones after {0}:", message);
foreach (OcrZone ocrZone in ocrPage.Zones)
{
int index = ocrPage.Zones.IndexOf(ocrZone);
Console.WriteLine("Zone index: {0}", index);
Console.WriteLine(" Id {0}", ocrZone.Id);
Console.WriteLine(" Bounds {0}", ocrZone.Bounds);
Console.WriteLine(" ZoneType {0}", ocrZone.ZoneType);
Console.WriteLine(" CharacterFilters: {0}", ocrZone.CharacterFilters);
Console.WriteLine("----------------------------------");
}
Console.WriteLine("Hit enter to continue");
//Console.ReadLine();
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images";
public const string OcrLEADRuntimeDir = @"C:\LEADTOOLS22\Bin\Common\OcrLEADRuntime";
}