LEADTOOLS (Leadtools assembly)

GetRegionClipSegments Method

Show in webframe
Example 







The number of the row for which to get the segments. The first row is 0, and the last row is 1 less than the image height.
Buffer to be updated with the segments from row contained in the region.
Zero based index into segmentsBuffer.
Gets the segments contained in the region for a particular row.
Syntax
public int GetRegionClipSegments( 
   int row,
   int[] segmentsBuffer,
   int segmentsBufferOffset
)
'Declaration
 
Public Function GetRegionClipSegments( _
   ByVal row As Integer, _
   ByVal segmentsBuffer() As Integer, _
   ByVal segmentsBufferOffset As Integer _
) As Integer
'Usage
 
Dim instance As RasterImage
Dim row As Integer
Dim segmentsBuffer() As Integer
Dim segmentsBufferOffset As Integer
Dim value As Integer
 
value = instance.GetRegionClipSegments(row, segmentsBuffer, segmentsBufferOffset)
public int GetRegionClipSegments( 
   int row,
   int[] segmentsBuffer,
   int segmentsBufferOffset
)
-(unsigned int)getRegionClipSegments:(int)row 
                      segmentsBuffer:(unsigned int*)segmentsBuffer;
            
public int getRegionClipSegments(
  int row, 
  int[] segmentsBuffer, 
  int segmentsBufferOffset
)
            
 function Leadtools.RasterImage.GetRegionClipSegments( 
   row ,
   segmentsBuffer ,
   segmentsBufferOffset 
)
public:
int GetRegionClipSegments( 
   int row,
   array<int>^ segmentsBuffer,
   int segmentsBufferOffset
) 

Parameters

row
The number of the row for which to get the segments. The first row is 0, and the last row is 1 less than the image height.
segmentsBuffer
Buffer to be updated with the segments from row contained in the region.
segmentsBufferOffset
Zero based index into segmentsBuffer.

Return Value

The number of segments from row that are contained in the region.
Remarks

To use this method, first call GetRegionBounds with the xform set to null (Nothing in Visual Basic), to get the image boundaries. The bounding rectangle will indicate which rows are contained in the region. Go through all the rows contained in the region to get the segments contained in the region.

The segments are returned as an array of pairs of horizontal offsets. The first point in the pair is the beginning of the segment (it is contained in the region). The last point in the pair is the end of the segment. To follow the Windows rules, the end of the segment is the first point NOT CONTAINED in the region.

In most regions, there will be one segment per row. However, some regions can have 0, 1, 2 or more segments.

For example, assume that for a particular row there are two segments. segmentsBuffer will be filled with 4 values. Let's call them x0, x1, x2, x3. In this case:

Example
Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.WinForms
Imports Leadtools.Dicom
Imports Leadtools.Drawing

Public Sub GetRegionClipSegmentsExample()
   Dim codecs As RasterCodecs = New RasterCodecs()

   Dim srcFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp")
   Dim destFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Image1_GetRegionClipSegments.bmp")

   ' Load the image
   Dim image As RasterImage = codecs.Load(srcFileName)

   ' Add a region to the image
   Dim rc As LeadRect = New LeadRect(image.Width \ 3, image.Height \ 3, image.Width \ 3, image.Height \ 3)
   image.AddEllipseToRegion(Nothing, rc, RasterRegionCombineMode.Set)

   ' Set the pixels inside the region to black

   ' Get the maximum number of elements in a row,
   ' so we know how big the array of segments should be
   Dim maxClipSegments As Integer = image.CalculateRegionMaximumClipSegments()

   ' Get the region bounds, so we know which is the first row
   Dim rgnBounds As LeadRect = image.GetRegionBounds(Nothing)

   ' Allocate an array large enough to store the maximum number of segments.
   Dim segmentBuffer As Integer() = New Integer(maxClipSegments - 1) {}

   ' Loop through the region rows
   Dim y As Integer = rgnBounds.Top
   Do While y < rgnBounds.Bottom
      ' Get the segments for the row
      image.GetRegionClipSegments(y, segmentBuffer, 0)

      ' Do something with the pixels
      Dim i As Integer = 0
      Do While i < maxClipSegments / 2
         Dim j As Integer = segmentBuffer(i)
         Do While j < segmentBuffer(i + 1)
            Dim clr As RasterColor = image.GetPixelColor(y, j)
            clr = New RasterColor(clr.R \ 2, clr.G \ 2, clr.B \ 2)
            image.SetPixelColor(y, j, clr)
            j += 1
         Loop
         i += 1
      Loop
      y += 1
   Loop

   ' Save the image back to file
   codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24)

   image.Dispose()
   codecs.Dispose()
End Sub

Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.WinForms;
using Leadtools.Dicom;
using Leadtools.Drawing;

      
public void GetRegionClipSegmentsExample()
{
   RasterCodecs codecs = new RasterCodecs();
   string srcFileName = Path.Combine(ImagesPath.Path, "Image1.cmp");
   string destFileName = Path.Combine(ImagesPath.Path, "Image1_GetRegionClipSegments.bmp");

   // Load the image
   RasterImage image = codecs.Load(srcFileName);

   // Add a region to the image
   LeadRect rc = new LeadRect(image.Width / 3, image.Height / 3, image.Width / 3, image.Height / 3);
   image.AddEllipseToRegion(null, rc, RasterRegionCombineMode.Set);

   // Set the pixels inside the region to black

   // Get the maximum number of elements in a row,
   // so we know how big the array of segments should be
   int maxClipSegments = image.CalculateRegionMaximumClipSegments();

   // Get the region bounds, so we know which is the first row
   LeadRect rgnBounds = image.GetRegionBounds(null);

   // Allocate an array large enough to store the maximum number of segments.
   int[] segmentBuffer = new int[maxClipSegments];

   // Loop through the region rows
   for(int y = rgnBounds.Top; y < rgnBounds.Bottom; y++)
   {
      // Get the segments for the row
      image.GetRegionClipSegments(y, segmentBuffer, 0);

      // Do something with the pixels
      for(int i = 0; i < maxClipSegments / 2; i++)
      {
         for(int j = segmentBuffer[i]; j < segmentBuffer[i + 1]; j++)
         {
            RasterColor clr = image.GetPixelColor(y, j);
            clr = new RasterColor(clr.R / 2, clr.G / 2, clr.B / 2);
            image.SetPixelColor(y, j, clr);
         }
      }
   }

   // Save the image back to file
   codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24);

   image.Dispose();
   codecs.Dispose();
}
RasterImageExamples.prototype.GetRegionClipSegmentsExample = function()
{
   Tools.SetLicense ( ) ;
   with ( Leadtools ) { 
      with ( Leadtools.Codecs ) {
         var codecs = new RasterCodecs();

         var srcFileName = "Assets\\Image1.cmp";
         var destFileName = "Image1_GetRegionClipSegments1.bmp";
         var image = null;

         // Load the image
         return Tools.AppInstallFolder().getFileAsync(srcFileName).then ( function ( loadFile ) {
            return codecs.loadAsync(LeadStreamFactory.create(loadFile));})
         .then ( function (img) {
            image = img;
            // Add a region to the image
            var rc = LeadRectHelper.create(image.width / 3, image.height / 3, image.width / 3, image.height / 3);
            image.addEllipseToRegion(null, rc, RasterRegionCombineMode.set);

            // Set the pixels inside the region to black

            // Get the maximum number of elements in a row,
            // so we know how big the array of segments should be
            var maxClipSegments = image.calculateRegionMaximumClipSegments();

            // Get the region bounds, so we know which is the first row
            var rgnBounds = image.getRegionBounds(null);

            // Allocate an array large enough to store the maximum number of segments.
            var segmentBuffer = new Array(maxClipSegments);

            // Loop through the region rows
            for (var y = rgnBounds.y; y < rgnBounds.height + rgnBounds.y; y++)
            {
               // Get the segments for the row
               image.getRegionClipSegments(y, segmentBuffer, 0);

               // Do something with the pixels
               for (var i = 0; i < maxClipSegments / 2; i++)
               {
                  for (var j = segmentBuffer[i]; j < segmentBuffer[i + 1]; j++)
                  {
                     var clr = image.getPixelColor(y, j);
                     clr = RasterColorHelper.create(clr.r / 2, clr.g / 2, clr.b / 2);
                     image.setPixelColor(y, j, clr);
                  }
               }
            }

            // Save the image back to file
            return Tools.AppLocalFolder().createFileAsync(destFileName);})
         .then ( function ( saveFile)  {
            var saveStream = LeadStreamFactory.create(saveFile);
            return codecs.saveAsync(image, saveStream, RasterImageFormat.bmp, 24); })
         .then ( function ( ) {

            image.close();
            codecs.close();
         })
      }
   }
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Dicom;

      
public async Task GetRegionClipSegmentsExample()
{
   RasterCodecs codecs = new RasterCodecs();
   string srcFileName = @"Assets\Image1.cmp";
   string destFileName = @"Image1_GetRegionClipSegments.bmp";

   // Load the image
   StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(srcFileName);
   RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile));

   // Add a region to the image
   LeadRect rc = LeadRectHelper.Create(image.Width / 3, image.Height / 3, image.Width / 3, image.Height / 3);
   image.AddEllipseToRegion(null, rc, RasterRegionCombineMode.Set);

   // Set the pixels inside the region to black

   // Get the maximum number of elements in a row,
   // so we know how big the array of segments should be
   int maxClipSegments = image.CalculateRegionMaximumClipSegments();

   // Get the region bounds, so we know which is the first row
   LeadRect rgnBounds = image.GetRegionBounds(null);

   // Allocate an array large enough to store the maximum number of segments.
   int[] segmentBuffer = new int[maxClipSegments];

   // Loop through the region rows
   for (int y = rgnBounds.Y; y < rgnBounds.Height; y++)
   {
      // Get the segments for the row
      image.GetRegionClipSegments(y, segmentBuffer, 0);

      // Do something with the pixels
      for (int i = 0; i < maxClipSegments / 2; i++)
      {
         for (int j = segmentBuffer[i]; j < segmentBuffer[i + 1]; j++)
         {
            RasterColor clr = image.GetPixelColor(y, j);
            clr = RasterColorHelper.Create(clr.R / 2, clr.G / 2, clr.B / 2);
            image.SetPixelColor(y, j, clr);
         }
      }
   }

   // Save the image back to file
   StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(destFileName);
   ILeadStream saveStream = LeadStreamFactory.Create(saveFile);
   await codecs.SaveAsync(image, saveStream, RasterImageFormat.Bmp, 24);

   image.Dispose();
   codecs.Dispose();
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Dicom;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Examples;
using Leadtools.Windows.Media;

public void GetRegionClipSegmentsExample(RasterImage image, Stream destStream)
{
   // Add a region to the image
   LeadRect rc = new LeadRect(image.Width / 3, image.Height / 3, image.Width / 3, image.Height / 3);
   image.AddRectangleToRegion(null, rc, RasterRegionCombineMode.Set);
   // Set the pixels inside the region to black

   // Get the maximum number of elements in a row,
   // so we know how big the array of segments should be
   int maxClipSegments = image.CalculateRegionMaximumClipSegments();

   // Get the region bounds, so we know which is the first row
   LeadRect rgnBounds = image.GetRegionBounds(null);

   // Allocate an array large enough to store the maximum number of segments.
   int[] segmentBuffer = new int[maxClipSegments];

   // Loop through the region rows
   for (int y = rgnBounds.Top; y < rgnBounds.Bottom; y++)
   {
      // Get the segments for the row
      image.GetRegionClipSegments(y, segmentBuffer, 0);

      // Do something with the pixels
      for (int i = 0; i < maxClipSegments / 2; i++)
      {
         for (int j = segmentBuffer[i]; j < segmentBuffer[i + 1]; j++)
         {
            RasterColor clr = image.GetPixelColor(y, j);
            clr = new RasterColor(clr.R / 2, clr.G / 2, clr.B / 2);
            image.SetPixelColor(y, j, clr);
         }
      }
   }

   // Save the image back to file
   RasterCodecs codecs = new RasterCodecs();
   codecs.Save(image, destStream, RasterImageFormat.Bmp, 0);

   image.Dispose();
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Dicom
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Windows.Media

Public Sub GetRegionClipSegmentsExample(ByVal image As RasterImage, ByVal destStream As Stream)
   ' Add a region to the image
   Dim rc As LeadRect = New LeadRect(image.Width / 3, image.Height / 3, image.Width / 3, image.Height / 3)
   image.AddRectangleToRegion(Nothing, rc, RasterRegionCombineMode.Set)
   ' Set the pixels inside the region to black

   ' Get the maximum number of elements in a row,
   ' so we know how big the array of segments should be
   Dim maxClipSegments As Integer = image.CalculateRegionMaximumClipSegments()

   ' Get the region bounds, so we know which is the first row
   Dim rgnBounds As LeadRect = image.GetRegionBounds(Nothing)

   ' Allocate an array large enough to store the maximum number of segments.
   Dim segmentBuffer As Integer() = New Integer(maxClipSegments - 1){}

   ' Loop through the region rows
   Dim y As Integer = rgnBounds.Top
   Do While y < rgnBounds.Bottom
      ' Get the segments for the row
      image.GetRegionClipSegments(y, segmentBuffer, 0)

      ' Do something with the pixels
      Dim i As Integer = 0
      Do While i < maxClipSegments / 2
         Dim j As Integer = segmentBuffer(i)
         Do While j < segmentBuffer(i + 1)
            Dim clr As RasterColor = image.GetPixelColor(y, j)
            clr = New RasterColor(clr.R / 2, clr.G / 2, clr.B / 2)
            image.SetPixelColor(y, j, clr)
            j += 1
         Loop
         i += 1
      Loop
      y += 1
   Loop

   ' Save the image back to file
   Dim codecs As RasterCodecs = New RasterCodecs()
   codecs.Save(image, destStream, RasterImageFormat.Bmp, 0)

   image.Dispose()
End Sub
Requirements

Target Platforms

See Also

Reference

RasterImage Class
RasterImage Members

 

 


Products | Support | Contact Us | Copyright Notices

© 2006-2014 All Rights Reserved. LEAD Technologies, Inc.