LEADTOOLS WCF Image Processing (Leadtools.Services.ImageProcessing.ServiceContracts assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.30
HolePunchRemove Method
See Also 
Leadtools.Services.ImageProcessing.ServiceContracts Namespace > IDocumentProcessingService Interface : HolePunchRemove Method



request
A System.Runtime.Serialization.DataContractAttribute containing the data that will be used in this Leadtools.Services.ImageProcessing.ServiceContracts.IDocumentProcessingService.HolePunchRemove operation.

The HolePunchRemove Method is available in LEADTOOLS Document and Medical Imaging toolkits.

Finds and removes hole punches. This operation is available in the Document/Medical Toolkits.

Syntax

Visual Basic (Declaration) 
<FaultContractAttribute(DetailType=Leadtools.Services.Raster.FaultContracts.RasterFault, 
   Action="", 
   Name="", 
   Namespace="", 
   ProtectionLevel=ProtectionLevel.None, 
   HasProtectionLevel=False)>
<OperationContractAttribute("HolePunchRemove")>
Function HolePunchRemove( _
   ByVal request As HolePunchRemoveRequest _
) As DocumentResponse
Visual Basic (Usage)Copy Code
Dim instance As IDocumentProcessingService
Dim request As HolePunchRemoveRequest
Dim value As DocumentResponse
 
value = instance.HolePunchRemove(request)
C# 
[FaultContractAttribute(DetailType=Leadtools.Services.Raster.FaultContracts.RasterFault, 
   Action="", 
   Name="", 
   Namespace="", 
   ProtectionLevel=ProtectionLevel.None, 
   HasProtectionLevel=false)]
[OperationContractAttribute("HolePunchRemove")]
DocumentResponse HolePunchRemove( 
   HolePunchRemoveRequest request
)
C++/CLI 
[FaultContractAttribute(DetailType=Leadtools.Services.Raster.FaultContracts.RasterFault, 
   Action="", 
   Name="", 
   Namespace="", 
   ProtectionLevel=ProtectionLevel.None, 
   HasProtectionLevel=false)]
[OperationContractAttribute("HolePunchRemove")]
DocumentResponse^ HolePunchRemove( 
   HolePunchRemoveRequest^ request
) 

Parameters

request
A System.Runtime.Serialization.DataContractAttribute containing the data that will be used in this Leadtools.Services.ImageProcessing.ServiceContracts.IDocumentProcessingService.HolePunchRemove operation.

Return Value

A System.Runtime.Serialization.DataContractAttribute containing the modified image resulting from the Leadtools.Services.ImageProcessing.ServiceContracts.IDocumentProcessingService.HolePunchRemove operation.

Example

Visual BasicCopy Code
Public Sub HolePunchRemoveExample()
      Dim client As DocumentProcessingServiceClient = New DocumentProcessingServiceClient()
      Dim sourceBinaryData As RawBinaryData = New RawBinaryData()
      sourceBinaryData.Data = File.ReadAllBytes(Path.Combine(LEAD_VARS.ImagesDir, "clean.tif"))

      Dim convertOptions As RasterConvertOptions = New RasterConvertOptions()

      convertOptions.Source = sourceBinaryData
      convertOptions.Destination = Nothing
      convertOptions.Format = RasterImageFormat.Bmp
      convertOptions.FirstPage = 1
      convertOptions.LastPage = 1
      convertOptions.BitsPerPixel = 24
      convertOptions.QualityFactor = 2

      Dim request As HolePunchRemoveRequest = New HolePunchRemoveRequest()

      request.ConvertOptions = convertOptions
      request.RegionData = Nothing
      request.Flags = HolePunchRemoveCommandFlags.GetRegion Or HolePunchRemoveCommandFlags.UseDpi Or HolePunchRemoveCommandFlags.UseCount Or HolePunchRemoveCommandFlags.UseLocation
      request.MinimumHoleCount = 2
      request.MaximumHoleCount = 4
      request.MinimumHoleWidth = 0
      request.MinimumHoleHeight = 0
      request.MaximumHoleWidth = 0
      request.MaximumHoleHeight = 0
      request.Location = HolePunchRemoveCommandLocation.Left

      Dim response As DocumentResponse = client.HolePunchRemove(request)
      If Not response.Destination Is Nothing Then
         If TypeOf response.Destination Is RawBinaryData Then
            File.WriteAllBytes(Path.Combine(LEAD_VARS.ImagesDir, "HolePunchRemove.bmp"), (TryCast(response.Destination, RawBinaryData)).Data)
         End If
      End If

      If Not response.Region Is Nothing Then
         Dim bitmap As Bitmap = New Bitmap(Path.Combine(LEAD_VARS.ImagesDir, "HolePunchRemove.bmp"))
         Dim graphics As Graphics = graphics.FromImage(bitmap)

         Dim region1 As Region = New Region()
         Dim regionData As RegionData = region1.GetRegionData()
         regionData.Data = response.Region.Data

         Dim region2 As Region = New Region(regionData)

         graphics.FillRegion(Brushes.Red, region2)

         bitmap.Save(Path.Combine(LEAD_VARS.ImagesDir, "HolePunchRemoveRegion.bmp"))

         region2.Dispose()
         region1.Dispose()
         bitmap.Dispose()
         graphics.Dispose()
      End If

      client.Close()
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
public void HolePunchRemoveExample()
   {
      DocumentProcessingServiceClient client = new DocumentProcessingServiceClient();
      RawBinaryData sourceBinaryData = new RawBinaryData();
      sourceBinaryData.Data = File.ReadAllBytes(Path.Combine(LEAD_VARS.ImagesDir, "clean.tif"));

      RasterConvertOptions convertOptions = new RasterConvertOptions();

      convertOptions.Source = sourceBinaryData;
      convertOptions.Destination = null;
      convertOptions.Format = RasterImageFormat.Bmp;
      convertOptions.FirstPage = 1;
      convertOptions.LastPage = 1;
      convertOptions.BitsPerPixel = 24;
      convertOptions.QualityFactor = 2;

      HolePunchRemoveRequest request = new HolePunchRemoveRequest();

      request.ConvertOptions = convertOptions;
      request.RegionData = null;
      request.Flags = HolePunchRemoveCommandFlags.GetRegion | HolePunchRemoveCommandFlags.UseDpi | HolePunchRemoveCommandFlags.UseCount | HolePunchRemoveCommandFlags.UseLocation;
      request.MinimumHoleCount = 2;
      request.MaximumHoleCount = 4;
      request.MinimumHoleWidth = 0;
      request.MinimumHoleHeight = 0;
      request.MaximumHoleWidth = 0;
      request.MaximumHoleHeight = 0;
      request.Location = HolePunchRemoveCommandLocation.Left;

      DocumentResponse response = client.HolePunchRemove(request);
      if (response.Destination != null)
      {
         if (response.Destination is RawBinaryData)
            File.WriteAllBytes(Path.Combine(LEAD_VARS.ImagesDir, "HolePunchRemove.bmp"), (response.Destination as RawBinaryData).Data);
      }

      if (response.Region != null)
      {
         Bitmap bitmap = new Bitmap(Path.Combine(LEAD_VARS.ImagesDir,"HolePunchRemove.bmp"));
         Graphics graphics = Graphics.FromImage(bitmap);

         Region region1 = new Region();
         RegionData regionData = region1.GetRegionData();
         regionData.Data = response.Region.Data;

         Region region2 = new Region(regionData);

         graphics.FillRegion(Brushes.Red, region2);

         bitmap.Save(Path.Combine(LEAD_VARS.ImagesDir,"HolePunchRemoveRegion.bmp"));

         region2.Dispose();
         region1.Dispose();
         bitmap.Dispose();
         graphics.Dispose();
      }

      client.Close();
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}

Remarks

  • This operation detects and removes hole punches that are common in scanned documents.
  • This operation works only on 1-bit black and white images.
  • Hole punch configurations may consist of 2 or more holes.
  • If a region is selected, only the selected region will be changed by this operation. If no region is selected, the whole image will be processed.
  • This operation does not support signed data images.
  • This operation does not support 32-bit grayscale images.
  • Before calling this operation, ensure that the hole punch is free of any other stray marks. If you do not, the hole will not be recognized. Use the Leadtools.Services.ImageProcessing.ServiceContracts.IDocumentProcessingService.LineRemove operation to remove any horizontal or vertical lines from the image. Use the other Document Cleanup operations to remove other imaging artifacts such as dots, blobs, borders, inverted text, bumps and nicks. This will have the added benefit of making your image smaller when compressed.

For example, the following image must have the vertical line removed:

Once the image has been cleaned, as shown in the following figure, the hole punch can be removed:

For more information, refer to Cleaning Up 1-Bit Images.

Requirements

Target Platforms: Microsoft .NET Framework 3.0, Windows 2000, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7

See Also

Applications developed with LEADTOOLS WCF components require runtime licenses. Server licensing is required for applications on a server. For more information, refer to: Imaging Pro/Document/Medical Features