Leadtools Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
GetRowCompressed(IntPtr,IntPtr,Int32,Int32) Method
See Also  Example
Leadtools Namespace > RasterImage Class > GetRowCompressed Method : GetRowCompressed(IntPtr,IntPtr,Int32,Int32) Method



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 * ((Width + 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.
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

Visual Basic (Declaration) 
Public Overloads Sub GetRowCompressed( _
   ByVal workBuffer As IntPtr, _
   ByVal runBuffer As IntPtr, _
   ByVal row As Integer, _
   ByVal lines As Integer _
) 
Visual Basic (Usage)Copy Code
Dim instance As RasterImage
Dim workBuffer As IntPtr
Dim runBuffer As IntPtr
Dim row As Integer
Dim lines As Integer
 
instance.GetRowCompressed(workBuffer, runBuffer, row, lines)
C# 
public void GetRowCompressed( 
   IntPtr workBuffer,
   IntPtr runBuffer,
   int row,
   int lines
)
C++/CLI 
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 * ((Width + 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.

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.

Visual BasicCopy Code
Public Sub GetRowCompressedExample()
   RasterCodecs.Startup()
   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(LeadtoolsExamples.Common.ImagesPath.Path + "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.

   If image.IsGlobalMemory Then
      image.Access()
   End If
   ' 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)

   If image.IsGlobalMemory Then
      image.Release()
   End If

   codecs.Save(image, LeadtoolsExamples.Common.ImagesPath.Path + "IMAGE1_getrowcompresed.BMP", RasterImageFormat.Bmp, 0)

   image.Dispose()
   codecs.Dispose()
   RasterCodecs.Shutdown()
End Sub
C#Copy Code
public void GetRowCompressedExample() 

   RasterCodecs.Startup(); 
   RasterCodecs codecs = new RasterCodecs(); 
   // Load the bitmap, at 1 bit per pixel, compressed 
   codecs.Options.Load.Compressed = true; 
   RasterImage image = codecs.Load(LeadtoolsExamples.Common.ImagesPath.Path + "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, LeadtoolsExamples.Common.ImagesPath.Path + "IMAGE1_getrowcompresed.BMP", RasterImageFormat.Bmp, 0); 
 
   image.Dispose(); 
   codecs.Dispose(); 
   RasterCodecs.Shutdown(); 
}

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.

Requirements

Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family

See Also