←Select platform

GetRowCompressed(IntPtr,IntPtr,int,int) Method

Summary
Retrieves (into an unmanaged memory buffer) one or more rows of 1-bit compressed data from an image that has been loaded in its compressed format.
Syntax
C#
VB
C++
Java
public void GetRowCompressed( 
   IntPtr workBuffer, 
   IntPtr runBuffer, 
   int row, 
   int lines 
) 
Public Overloads Sub GetRowCompressed( _ 
   ByVal workBuffer As IntPtr, _ 
   ByVal runBuffer As IntPtr, _ 
   ByVal row As Integer, _ 
   ByVal lines As Integer _ 
)  
public void getRowCompressed( 
  byte[] workBuffer,  
  short[] runBuffer,  
  int row,  
  int lines 
) 
public: 
void GetRowCompressed(  
   IntPtr workBuffer, 
   IntPtr runBuffer, 
   int row, 
   int lines 
)  

Parameters

workBuffer
Pointer to optional work unmanaged memory buffer. Allocating the work buffer speeds processing if you call this method more than once, because if you do not allocate a work buffer, the method allocates and frees a temporary buffer each time it is called. bytes required = lines * ((RasterImage-Width.html) + 3) * 2). Pass IntPtr.Zero for workBuffer if you do not want to use the work buffer

runBuffer
Pointer to the output unmanaged memory buffer, which will be filled with 1-bit compressed image data.

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

lines
Number of rows to retrieve.

Remarks

This method is available in the (Document/Medical only) Toolkits.

This method is useful for working with 1-bit images that are loaded in their compressed formats for faster loading and display.

For more information, refer to Speeding Up 1-Bit Documents.

Example

This example demonstrates the low-level methods for accessing 1-bit compressed image data. It demonstrates the ability to get and put rows, and the ability to process rows in buffer-to-buffer processing. The result of the function is an the first 50 lines are inverted.

C#
VB
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 GetRowCompressedExample() 
{ 
	RasterCodecs codecs = new RasterCodecs(); 
	// Load the bitmap, at 1 bit per pixel, compressed 
	codecs.Options.Load.Compressed = true; 
	RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "OCR1.TIF"), 1, Leadtools.Codecs.CodecsLoadByteOrder.Bgr, 1, 1); 
 
	// This example does not work with rotated view perspectives. 
	if ((image.ViewPerspective != RasterViewPerspective.TopLeft) || (image.ViewPerspective != RasterViewPerspective.BottomLeft)) 
		image.ChangeViewPerspective(RasterViewPerspective.TopLeft); 
 
	// Adjust the YOffset if the view perspective is bottom left. 
	int nRow = 500; // first row to get. 
	int nYSize = 500; // number of rows to get. 
 
	if (image.ViewPerspective == RasterViewPerspective.BottomLeft) 
		nRow = image.Height - nRow - nYSize; 
 
	// Allocate the buffers. 
	byte[] pBuffer = new byte[Convert.ToInt32((((image.Width + 31) & ~(31)) / 8)) * nYSize]; // Buffer to hold the expanded row. 
	ushort[] pRunBuffer = new ushort[((image.Width + 3) * 2) * nYSize]; // Buffer to hold the compressed row. 
 
	if (image.IsGlobalMemory) 
		image.Access(); 
	// Get the top nRow lines. 
	image.GetRowCompressed(null, pRunBuffer, 0, nRow, nYSize); 
	// Expand the compressed data. 
	RasterRleCompressor.ExpandRows(pRunBuffer, pBuffer, 0, image.Width, nYSize); 
	// Invert the data. 
 
	for (int n = 0; n < (image.BytesPerLine * nYSize); n++) 
		pBuffer[n] ^= 0xff; 
 
 
	// Compress the inverted data. 
	RasterRleCompressor.CompressRows(pRunBuffer, pBuffer, 0, image.Width, nYSize); 
 
	// Put the inverted, compressed data back into the image. 
	image.SetRowCompressed(null, pRunBuffer, 0, nRow, nYSize); 
 
	if (image.IsGlobalMemory) 
		image.Release(); 
 
	codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrowcompresed.BMP"), RasterImageFormat.Bmp, 0); 
 
	image.Dispose(); 
	codecs.Dispose(); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS21\Resources\Images"; 
} 
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 GetRowCompressedExample() 
   Dim codecs As RasterCodecs = New RasterCodecs() 
   ' Load the bitmap, at 1 bit per pixel, compressed 
   codecs.Options.Load.Compressed = True 
   Dim image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "OCR1.TIF"), 1, CodecsLoadByteOrder.Bgr, 1, 1) 
 
   ' This example does not work with rotated view perspectives. 
   If (image.ViewPerspective <> RasterViewPerspective.TopLeft) OrElse (image.ViewPerspective <> RasterViewPerspective.BottomLeft) Then 
      image.ChangeViewPerspective(RasterViewPerspective.TopLeft) 
   End If 
 
   ' Adjust the YOffset if the view perspective is bottom left. 
   Dim nRow As Integer = 500 ' first row to get. 
   Dim nYSize As Integer = 500 ' number of rows to get. 
 
   If image.ViewPerspective = RasterViewPerspective.BottomLeft Then 
      nRow = image.Height - nRow - nYSize 
   End If 
 
   ' Allocate the buffers. 
   Dim pBuffer As Byte() = New Byte(Convert.ToInt32((((image.Width + 31) And Not (31)) / 8)) * nYSize - 1) {} ' Buffer to hold the expanded row. 
   Dim pRunBuffer As System.UInt16() = New System.UInt16(((image.Width + 3) * 2) * nYSize - 1) {} ' Buffer to hold the compressed row. 
 
   image.Access() 
   ' Get the top nRow lines. 
   image.GetRowCompressed(Nothing, pRunBuffer, 0, nRow, nYSize) 
   ' Expand the compressed data. 
   RasterRleCompressor.ExpandRows(pRunBuffer, pBuffer, 0, image.Width, nYSize) 
   ' Invert the data. 
 
   Dim n As Integer = 0 
   Do While n < (image.BytesPerLine * nYSize) 
      pBuffer(n) = pBuffer(n) Xor Convert.ToByte(&HFF) 
      n += 1 
   Loop 
 
 
   ' Compress the inverted data. 
   RasterRleCompressor.CompressRows(pRunBuffer, pBuffer, 0, image.Width, nYSize) 
 
   ' Put the inverted, compressed data back into the image. 
   image.SetRowCompressed(Nothing, pRunBuffer, 0, nRow, nYSize) 
 
   image.Release() 
   codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrowcompresed.BMP"), RasterImageFormat.Bmp, 0) 
 
   image.Dispose() 
   codecs.Dispose() 
End Sub 
 
Public NotInheritable Class LEAD_VARS 
   Public Const ImagesDir As String = "C:\LEADTOOLS21\Resources\Images" 
End Class 
Requirements

Target Platforms

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

Leadtools Assembly

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