Products | Support | Email a link to this topic. | Send comments on this topic. | Back to Introduction - All Topics | Help Version 19.0.6.28
|
Leadtools Namespace > RasterImage Class > GetRow Method : GetRow(Int32,IBuffer,Int32,Int32) Method |
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 * NumberOfPixels) / 8; if((Image.BitsPerPixel * NumberOfPixels) % 8) NumberOfBytes = NumberOfBytes + 1; // Round up if necessary for a 1- or 4-bit image
public int GetRow( int row, IBuffer buffer, int bufferIndex, int bufferCount )
'Declaration
Public Overloads Function GetRow( _ ByVal row As Integer, _ ByVal buffer As IBuffer, _ ByVal bufferIndex As Integer, _ ByVal bufferCount As Integer _ ) As Integer
'Usage
Dim instance As RasterImage Dim row As Integer Dim buffer As IBuffer Dim bufferIndex As Integer Dim bufferCount As Integer Dim value As Integer value = instance.GetRow(row, buffer, bufferIndex, bufferCount)
public int GetRow( int row, IBuffer buffer, int bufferIndex, int bufferCount )
function Leadtools.RasterImage.GetRow(Int32,IBuffer,Int32,Int32)( row , buffer , bufferIndex , bufferCount )
public: int GetRow( int row, IBuffer^ buffer, int bufferIndex, int bufferCount )
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 * NumberOfPixels) / 8; if((Image.BitsPerPixel * NumberOfPixels) % 8) NumberOfBytes = NumberOfBytes + 1; // Round up if necessary for a 1- or 4-bit image
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.RommRasterByteOrder.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.
Imports Leadtools Imports Leadtools.Codecs Imports Leadtools.ImageProcessing Imports Leadtools.ImageProcessing.Core Imports Leadtools.ImageProcessing.Color Imports Leadtools.Controls Imports Leadtools.Dicom Imports Leadtools.Drawing Imports Leadtools.Svg Public Sub GetRowTest() Dim codecs As RasterCodecs = New RasterCodecs() Dim image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1.CMP")) Dim row1 As Byte() = New Byte(image.BytesPerLine - 1) {} Dim row2 As Byte() = New Byte(image.BytesPerLine - 1) {} If image.IsGlobalMemory Then image.Access() End If Dim y As Integer = 0 Do While y < image.Height \ 2 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) y += 1 Loop If image.IsGlobalMemory Then image.Release() End If codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrow.BMP"), RasterImageFormat.Bmp, 0) 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.Dicom; using Leadtools.Drawing; using Leadtools.Controls; using Leadtools.Svg; public void GetRowTest() { RasterCodecs codecs = new RasterCodecs(); RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path, "IMAGE1.CMP")); byte[] row1 = new byte[image.BytesPerLine]; byte[] row2 = new byte[image.BytesPerLine]; if(image.IsGlobalMemory) image.Access(); 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); } if(image.IsGlobalMemory) image.Release(); codecs.Save(image, Path.Combine(ImagesPath.Path, "IMAGE1_getrow.BMP"), RasterImageFormat.Bmp, 0); image.Dispose(); codecs.Dispose(); }
RasterImageExamples.prototype.GetRowTest = function ( ) { Tools.SetLicense ( ) ; with (Leadtools) { with (Leadtools.Codecs) { var codecs = new RasterCodecs(); var srcFileName = "Assets\\Image1.cmp"; var image; return Tools.AppInstallFolder().getFileAsync(srcFileName).then(function (loadFile) { return codecs.loadAsync(LeadStreamFactory.create(loadFile)) }) .then(function (img) { image = img; var row1 = new Array(image.BytesPerLine); var row2 = new Array(image.BytesPerLine); if (image.isGlobalMemory) image.accessData(); for (var 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); } if (image.isGlobalMemory) image.releaseData(); return Tools.AppLocalFolder().createFileAsync("IMAGE1_getrow.BMP") }) .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 GetRowTest() { RasterCodecs codecs = new RasterCodecs(); string srcFileName = @"Assets\Image1.cmp"; StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(srcFileName); RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile)); byte[] row1 = new byte[image.BytesPerLine]; byte[] row2 = new byte[image.BytesPerLine]; if (image.IsGlobalMemory) image.AccessData(); 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); } if (image.IsGlobalMemory) image.ReleaseData(); StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync("IMAGE1_getrow.BMP"); 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 GetRowTest(RasterImage image, Stream destStream) { byte[] row1 = new byte[image.BytesPerLine]; byte[] row2 = new byte[image.BytesPerLine]; if (image.IsGlobalMemory) image.Access(); 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); } if (image.IsGlobalMemory) image.Release(); 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 GetRowTest(ByVal image As RasterImage, ByVal destStream As Stream) Dim row1 As Byte() = New Byte(image.BytesPerLine - 1){} Dim row2 As Byte() = New Byte(image.BytesPerLine - 1){} If image.IsGlobalMemory Then image.Access() End If Dim y As Integer = 0 Do While y < image.Height / 2 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) y += 1 Loop If image.IsGlobalMemory Then image.Release() End If Dim codecs As RasterCodecs = New RasterCodecs() codecs.Save(image, destStream, RasterImageFormat.Bmp, 0) image.Dispose() End Sub