LBuffer::CompressRows (Document/Medical only)

#include "ltwrappr.h"

virtual L_INT LBuffer::CompressRows(LBufferSrc, nWidth, nRows)

LBuffer& LBufferSrc;

/* input LBuffer object */

L_UINT nWidth;

/* number of pixels in each row */

L_UINT nRows;

/* number of rows to process */

Performs buffer-to-buffer RLE compression of 1-bit image data. Use this function to process multiple lines of image data. This function is available in Document/Medical toolkits only.

Parameter

Description

LBufferSrc

The input buffer, which contains the 1-bit image data to be compressed. The size of each row must be rounded up to a multiple of 4 bytes. Use integer math to calculate the required size of this buffer as follows: bytes required = (((nWidth + 31) &~31)/ 8) * nRows.

nWidth

The number of pixels in each row.

nRows

The number of rows to process.

Returns

> 0

The number of pixels processed.

< 1

An error occurred. Refer to Return Codes.

Comments

The output buffer must be larger than the input buffer to accommodate the worst possible case with run-length encoding, where there are alternating black and white pixels. In most cases, however, the actual compressed data will be much smaller than the input data.

This function 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.

The parameter LBufferSrc is passed by reference, and is a required parameter.

Required DLLs and Libraries

LTDIS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application.

See Also

Functions:

Class Members

Topics:

Speeding Up 1-Bit Documents

Example

L_VOID TestCompressRows(LBitmapBase L_FAR * pLeadBitmap)
{
   LBuffer LeadBuffer, TmpBuffer ;
   L_INT nLines = 50 ;
   L_INT nRow = 0 ;
   L_CHAR L_FAR * pBuffer;

   pLeadBitmap->Access() ;

   // Get the top nRow lines 
   pLeadBitmap->GetRowCompressed( &LeadBuffer, nRow, nLines, NULL) ;
   
   // Expand the compressed data 
   TmpBuffer.ExpandRows(LeadBuffer, pLeadBitmap->GetWidth(), nLines) ;

   pBuffer = (L_CHAR L_FAR *)TmpBuffer.Lock() ;
   // Invert the data 
   for(L_INT n=0; n < pLeadBitmap->GetBytesPerLine() * nLines; n++)
      pBuffer[n] = pBuffer[n] ^ 0xFF;

   TmpBuffer.Unlock() ;

   // Compress the inverted data
   LeadBuffer.CompressRows( TmpBuffer, pLeadBitmap->GetWidth(), nLines);

   // Put the inverted, compressed data back into the bitmap
   pLeadBitmap->PutRowCompressed( LeadBuffer, nRow, nLines);

   pLeadBitmap->Release() ;
   
   TmpBuffer.Free();
   LeadBuffer.Free() ;
}