←Select platform

GetRegionClipSegments Method

Summary
Gets the segments contained in the region for a particular row.
Syntax
C#
Objective-C
C++/CLI
Java
Python
public int GetRegionClipSegments( 
   int row, 
   int[] segmentsBuffer, 
   int segmentsBufferOffset 
) 
- (NSUInteger)regionClipSegmentsForRow:(NSInteger)row  
                        segmentsBuffer:(unsigned int *)buffer 
public int getRegionClipSegments( 
   int intValue,  
   int[] int[Value,  
   int intValue2 
); 
public: 
int GetRegionClipSegments(  
   int row, 
   array<int>^ segmentsBuffer, 
   int segmentsBufferOffset 
)  
def GetRegionClipSegments(self,row,segmentsBuffer,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, 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:

  • portion from 0 to x0 - 1 is OUTSIDE the region
  • portion from x0 to x1 - 1 is INSIDE the region
  • portion from x1 to x2 - 1 is OUTSIDE the region
  • portion from x2 to x3 - 1 is INSIDE the region
  • portion from x3 to Width - 1 is OUTSIDE the region
Example

This example sets the value of pixels inside a region to half intensity.

C#
Java
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Core; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Dicom; 
using Leadtools.Drawing; 
using Leadtools.Controls; 
using Leadtools.Svg; 
 
 
public void GetRegionClipSegmentsExample() 
{ 
   RasterCodecs codecs = new RasterCodecs(); 
 
   string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp"); 
   string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "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(); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.List; 
 
import org.junit.*; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
import static org.junit.Assert.*; 
 
import leadtools.*; 
import leadtools.codecs.*; 
import leadtools.imageprocessing.core.*; 
import leadtools.svg.*; 
import leadtools.imageprocessing.CloneCommand; 
import leadtools.imageprocessing.FillCommand; 
import leadtools.imageprocessing.FlipCommand; 
import leadtools.imageprocessing.GrayscaleCommand; 
import leadtools.imageprocessing.color.InvertCommand; 
import leadtools.imageprocessing.color.PosterizeCommand; 
 
 
public void getRegionClipSegmentsExample() { 
   final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images"; 
   RasterCodecs codecs = new RasterCodecs(); 
   String srcFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1.cmp"); 
   String destFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1_GetRegionClipSegments.bmp"); 
 
   // Load the image 
   RasterImage image = codecs.load(srcFileName); 
 
   // Add a region to the image 
   LeadRect rc = new LeadRect(image.getWidth() / 3, image.getHeight() / 3, image.getWidth() / 3, 
         image.getHeight() / 3); 
   image.addEllipseToRegion(null, rc, RasterRegionCombineMode.SET); 
 
   // Set the pixels inside the region to black 
   assertTrue(rc.getLeft() == (image.getWidth() / 3)); 
 
   // 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.getTop(); y < rgnBounds.getBottom(); 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); 
 
   // Clean up 
   image.dispose(); 
   codecs.dispose(); 
 
   assertTrue("file unsuccessfully saved to " + destFileName, (new File(destFileName)).exists()); 
   System.out.printf("File saved successfully to %s%n", destFileName); 
} 
Requirements

Target Platforms

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

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