Products | Support | Send comments on this topic. | Email a link to this topic. | Back to Getting Started | Help Version 18.0.10.24
LEADTOOLS Raster imaging C++ Class library help

LBuffer::CompressRow

Show in webframe

#include "ltwrappr.h"

virtual L_INT LBuffer::CompressRow(LBufferSrc, nCol, nWidth)

LBuffer& LBufferSrc;

/* the input LBuffer object */

L_INT nCol;

/* column offset within the row */

L_INT nWidth;

/* number of pixels to process */

Performs buffer-to-buffer RLE compression of 1-bit image data. Use this function to process all or part of a single line of image data.

Parameter

Description

LBufferSrc

The input buffer, which contains the 1-bit image data to be compressed. Use integer math to calculate the required size of this buffer as follows: bytes required = (nCol + nWidth + 7) / 8.

nCol

Column offset within the row to be processed. The function skips this many pixels before it begins processing.

nWidth

The number of pixels 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.

Platforms

Win32, x64.

See Also

Functions:

Class Members

Topics:

Speeding Up 1-Bit Documents

Example

L_INT LBuffer__CompressRowExample(LBitmapBase  * pLeadBitmap)
{
   L_INT nRet;
   LBuffer LeadBuffer, TmpBuffer ;
   L_INT nXOffset; // Column offset of the rectangle to process 
   L_INT nXSize; // Pixel width of the rectangle to process 
   L_INT nYOffset; // Row offset of the rectangle to process 
   L_INT nYSize; // Pixel height of the rectangle to process 
   L_INT i,n; // indexs
   L_CHAR  * pBuffer ;
   // Specify a rectangle in the middle right part of the displayed image
   nXOffset = pLeadBitmap->GetWidth() / 3;
   nXSize = pLeadBitmap->GetWidth() * 2 / 3;
   nYOffset = pLeadBitmap->GetHeight() / 3;
   nYSize = pLeadBitmap->GetHeight() / 3;
   nRet =pLeadBitmap->Access() ;
   if(nRet !=SUCCESS)
      return nRet;
   for (i = nYOffset; i<(nYOffset + nYSize);i++)
   {
      nRet =(L_INT)pLeadBitmap->GetRowColCompressed( &LeadBuffer, i,nXOffset, nXSize, NULL);
      if(nRet < 1)
         return nRet;
      nRet =TmpBuffer.ExpandRow( LeadBuffer, 0, nXSize/2) ;
      if(nRet < 1)
         return nRet;
      pBuffer = (L_CHAR  *)TmpBuffer.Lock();
      for(n=0; n < (nXSize /16); n++)
         pBuffer[n] = pBuffer[n] ^ 0xFF;
      TmpBuffer.Unlock();
      nRet =LeadBuffer.CompressRow( TmpBuffer, 0, nXSize/2) ;
      if(nRet < 1)
         return nRet;
      nRet =(L_INT)pLeadBitmap->PutRowColCompressed( LeadBuffer, i, nXOffset, nXSize/2, NULL);
      if(nRet< 1)
         return nRet;
   }
   nRet = pLeadBitmap->Release() ;
   if(nRet !=SUCCESS)
      return nRet;
   nRet =TmpBuffer.Free();
   if(nRet !=SUCCESS)
      return nRet;
   nRet =LeadBuffer.Free();
   if(nRet !=SUCCESS)
      return nRet;
   return SUCCESS;
}
Products | Support | Contact Us | Copyright Notices
© 2006-2014 All Rights Reserved. LEAD Technologies, Inc.