←Select platform

GetRow(int,byte[],int,int) Method

Retrieves one or more rows of image data from this RasterImage into a managed memory buffer.
public int GetRow( 
   int row, 
   byte[] buffer, 
   int bufferIndex, 
   int bufferCount 
- (NSInteger)getRow:(NSInteger)row  
             buffer:(unsigned char *)buffer  
        bufferCount:(unsigned long)count  
              error:(NSError **)error 
public long getRow( 
  int row,  
  byte[] buffer,  
  int bufferIndex,  
  long bufferCount 
int GetRow(  
   int row, 
   array<byte>^ buffer, 
   int bufferIndex, 
   int bufferCount 
def GetRow(self,row,buffer,bufferIndex,bufferCount): 


The number of the row to retrieve. The first row is 0, and the last row is 1 less than the image height.

Buffer to hold the image data that this method gets. The size of this buffer must be large enough to hold the image data.

The zero-based index into the  buffer where the get operation should start.

The number of bytes in the row to retrieve. To get a full row, use the value in the BytesPerLine property

When getting less than full row, you must consider the bits per pixel. For a 1-bit image, each byte represents 8 pixels. For a 4-bit image, each byte represents 2 pixels. For an 8-bit image, each byte represents 1 pixel. For a 16-bit image, every 2 bytes represents one pixel. For 24-bit images, every three bytes represents one pixel. For a 32-bit image, every four bytes represents one pixel. For 48-bit images, every six bytes represents one pixel. For 64-bit images, every eight bytes represents one pixel.

You can use the BitsPerPixel property with integer math to calculate the number of bytes needed for a particular number of pixels. For example:

NumberOfBytes = Image.BitsPerPixel * (Image.Width * Image.Height + 7) / 8;

Return Value

The number of bytes copied.


This method copies image data from the RasterImage object to a buffer that you specify. The data is copied exactly as it is stored in the image.

The image memory must be locked when you use this method. Normally, you can call Access to lock the memory before starting an operation that uses this method. Then call Release when the operation is finished.

Note: The data in the buffer will be padded to BytesPerLine.

Use the BytesPerLine property of the RasterImage object to determine the byte count of each line. Color order is determined by the Order property. This value can be RasterByteOrder.Rgb, RasterByteOrder.Bgr, RasterByteOrder.Gray or RasterByteOrder.Romm. RasterByteOrder.Gray is only valid for 12 and 16-bit grayscale images. Support for 12 and 16-bit grayscale images is only available in the Document/Medical Imaging editions.


This example uses Get/SetRow to flip the image data.

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 GetRowTest() 
   RasterCodecs codecs = new RasterCodecs(); 
   RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1.CMP")); 
   byte[] row1 = new byte[image.BytesPerLine]; 
   byte[] row2 = new byte[image.BytesPerLine]; 
   for (int y = 0; y < image.Height / 2; y++) 
      image.GetRow(y, row1, 0, row1.Length); 
      image.GetRow(image.Height - y - 1, row2, 0, row2.Length); 
      image.SetRow(y, row2, 0, row2.Length); 
      image.SetRow(image.Height - y - 1, row1, 0, row1.Length); 
   codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrow.BMP"), RasterImageFormat.Bmp, 0); 
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 getRowExample() { 
   final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images"; 
   RasterCodecs codecs = new RasterCodecs(); 
   String destFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1_getrow.BMP"); 
   RasterImage image = codecs.load(combine(LEAD_VARS_IMAGES_DIR, "IMAGE1.CMP")); 
   byte[] row1 = new byte[image.getBytesPerLine()]; 
   byte[] row2 = new byte[image.getBytesPerLine()]; 
   for (int y = 0; y < image.getHeight() / 2; y++) { 
      image.getRow(y, row1, 0, row1.length); 
      image.getRow(image.getHeight() - y - 1, row2, 0, row2.length); 
      image.setRow(y, row2, 0, row2.length); 
      image.setRow(image.getHeight() - y - 1, row1, 0, row1.length); 
   // Save it 
   codecs.save(image, destFileName, RasterImageFormat.BMP, 0); 
   // Clean up 
   assertTrue("file unsuccessfully saved to " + destFileName, (new File(destFileName)).exists()); 
   System.out.printf("File saved successfully to %s%n", destFileName); 

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.