Leadtools Namespace > RasterImage Class : GetRegionClipSegments Method |
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 )
function Leadtools.RasterImage.GetRegionClipSegments( row , segmentsBuffer , segmentsBufferOffset )
public: int GetRegionClipSegments( int row, array<int>^ segmentsBuffer, int segmentsBufferOffset )
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:
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
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:\Users\Public\Documents\LEADTOOLS Images"; }
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(); }) } } }
[TestMethod] 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(); }
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(); }
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
Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2