←Select platform

GetRowColumnCompressed(byte[],ushort[],int,int,int,int) Method

Summary

Retrieves a row (or part of a row) of 1-bit compressed data from an image that has been loaded in its compressed format.

Syntax
C#
VB
Java
Objective-C
C++
[CLSCompliantAttribute(false)] 
public int GetRowColumnCompressed( 
   byte[] workBuffer, 
   ushort[] runBuffer, 
   int runBufferOffset, 
   int row, 
   int column, 
   int width 
) 
<CLSCompliantAttribute(False)> 
Public Overloads Function GetRowColumnCompressed( _ 
   ByVal workBuffer() As Byte, _ 
   ByVal runBuffer() As UShort, _ 
   ByVal runBufferOffset As Integer, _ 
   ByVal row As Integer, _ 
   ByVal column As Integer, _ 
   ByVal width As Integer _ 
) As Integer 
- (NSInteger)getRowColumnCompressed:(unsigned char *)workBuffer  
                          runBuffer:(unsigned short *)runBuffer  
                                row:(NSInteger)row  
                             column:(NSInteger)column  
                              width:(NSUInteger)pixels  
                              error:(NSError **)error 
public int getRowColumnCompressed( 
  byte[] workBuffer,  
  short[] runBuffer,  
  int runBufferOffset,  
  int row,  
  int column,  
  int width 
            ) 
[CLSCompliantAttribute(false)] 
public: 
int GetRowColumnCompressed(  
   array<byte>^ workBuffer, 
   array<ushort>^ runBuffer, 
   int runBufferOffset, 
   int row, 
   int column, 
   int width 
)  

Parameters

workBuffer
Optional work 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. The size of this buffer should be the same as the BytesPerLine property. Pass a null reference to runBuffer if you do not want to use a work buffer.

runBuffer
The output buffer, which will be filled with 1-bit compressed image data. Calculate the required size of this buffer as follows: bytes required = (Width + 3) * 2.

runBufferOffset
Index into runBuffer where the get operation should start.

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

column
The column offset within the row to retrieve. The first column offset is 0, and the last column offset is 1 less than the image width.

width
The number of pixels to retrieve.

Return Value

The number of pixels processed.

Remarks

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

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 bitmap data. It demonstrates the ability to get and set partial rows, and the ability to process partial rows in buffer-to-buffer processing. The result of the method is an inverted rectangle in the middle of the image.

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 LeadtoolsExamples.Common; 
using Leadtools.Svg; 
 
public void GetRowColumnCompressedExample() 
{ 
   RasterCodecs codecs = new RasterCodecs(); 
   // Load the bitmap, at 1 bit per pixel, compressed 
   codecs.Options.Load.Compressed = true; 
   RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path, "OCR1.TIF"), 1, Leadtools.Codecs.CodecsLoadByteOrder.Bgr, 1, 1); 
 
   int xOffset;   // Column offset of the rectangle to process. 
   int xSize;     // Pixel width of the rectangle to process. 
   int yOffset;   // Row offset of the rectangle to process. 
   int ySize;     // Pixel height of the rectangle to process. 
   int i, n;       // Counters. 
 
   byte[] buffer;      // Buffer to hold the expanded row. 
   ushort[] runBuffer; // Buffer to hold the compressed row. 
   byte[] workBuffer;  // Work buffer. 
 
   // This example does not work with rotated view perspectives. 
   if ((image.ViewPerspective != RasterViewPerspective.TopLeft) || (image.ViewPerspective != RasterViewPerspective.BottomLeft)) 
      image.ChangeViewPerspective(RasterViewPerspective.TopLeft); 
 
   // Specify a rectangle in the middle right part of the displayed image. 
   xOffset = image.Width / 3; 
   xSize = image.Width - xOffset; 
   yOffset = image.Height / 3; 
   ySize = image.Height / 3; 
   // Adjust the YOffset if the view perspective is bottom left. 
   if (image.ViewPerspective == RasterViewPerspective.BottomLeft) 
   { 
      yOffset = image.Height - yOffset - ySize; 
   } 
 
   if (image.IsGlobalMemory) 
      image.Access(); 
   // Allocate the buffers. 
   buffer = new Byte[(xSize + 7) / 8]; 
   runBuffer = new ushort[(xSize + 3) * 2]; 
   workBuffer = new Byte[image.BytesPerLine]; 
   // Invert the colors of pixels in the left half of the rectangle. 
   // Notice that we get the whole rectangle, but process only half of it. 
   for (i = yOffset; i < (yOffset + ySize); i++) 
   { 
      image.GetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize); 
      RasterRleCompressor.ExpandRow(runBuffer, buffer, 0, 0, xSize); 
      for (n = 0; n < (xSize / 16); n++) 
         buffer[n] ^= 0xFF; 
      RasterRleCompressor.CompressRow(runBuffer, buffer, 0, 0, xSize); 
      image.SetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize); 
 
   } 
   if (image.IsGlobalMemory) 
      image.Release(); 
 
   codecs.Save(image, Path.Combine(ImagesPath.Path, "IMAGE1_getrowcolcompresed.BMP"), RasterImageFormat.Bmp, 0); 
 
   image.Dispose(); 
   codecs.Dispose(); 
} 
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 GetRowColumnCompressedExample() 
   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) 
 
   Dim xOffset As Integer ' Column offset of the rectangle to process. 
   Dim xSize As Integer ' Pixel width of the rectangle to process. 
   Dim yOffset As Integer ' Row offset of the rectangle to process. 
   Dim ySize As Integer ' Pixel height of the rectangle to process. 
   Dim i, n As Integer ' Counters. 
 
   Dim buffer As Byte() ' Buffer to hold the expanded row. 
   Dim runBuffer As System.UInt16() ' Buffer to hold the compressed row. 
   Dim workBuffer As Byte() ' Work buffer. 
 
   ' 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 
 
   ' Specify a rectangle in the middle right part of the displayed image. 
   xOffset = image.Width \ 3 
   xSize = image.Width - xOffset 
   yOffset = image.Height \ 3 
   ySize = image.Height \ 3 
   ' Adjust the YOffset if the view perspective is bottom left. 
   If image.ViewPerspective = RasterViewPerspective.BottomLeft Then 
      yOffset = image.Height - yOffset - ySize 
   End If 
 
   image.Access() 
   ' Allocate the buffers. 
   buffer = New Byte((xSize + 7) \ 8 - 1) {} 
   runBuffer = New System.UInt16((xSize + 3) * 2 - 1) {} 
   workBuffer = New Byte(image.BytesPerLine - 1) {} 
   ' Invert the colors of pixels in the left half of the rectangle. 
   ' Notice that we get the whole rectangle, but process only half of it. 
   i = yOffset 
   Do While i < (yOffset + ySize) 
      image.GetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize) 
      RasterRleCompressor.ExpandRow(runBuffer, buffer, 0, 0, xSize) 
      n = 0 
      Do While n < (xSize / 16) 
         buffer(n) = buffer(n) Xor Convert.ToByte(&HFF) 
         n += 1 
      Loop 
      RasterRleCompressor.CompressRow(runBuffer, buffer, 0, 0, xSize) 
      image.SetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize) 
 
      i += 1 
   Loop 
   image.Release() 
 
   codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrowcolcompresed.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 

Requirements

Target Platforms

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

Leadtools Assembly