virtual L_INT LBuffer::CompressRows(LBufferSrc, nWidth, nRows)
Performs buffer-to-buffer RLE compression of 1-bit image data. Use this function to process multiple lines of image data.
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.
The number of pixels in each row.
The number of rows to process.
Value | Meaning |
---|---|
> 0 | The number of pixels processed. |
< 1 | An error occurred. Refer to Return Codes. |
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.
Win32, x64.
L_INT LBuffer__CompressRowsExample(LBitmapBase * pLeadBitmap)
{
L_INT nRet;
LBuffer LeadBuffer, TmpBuffer ;
L_INT nLines = 50 ;
L_INT nRow = 0 ;
L_CHAR * pBuffer;
nRet =pLeadBitmap->Access() ;
if(nRet !=SUCCESS)
return nRet;
// Get the top nRow lines
nRet =pLeadBitmap->GetRowCompressed( &LeadBuffer, nRow, nLines, NULL) ;
if(nRet !=SUCCESS)
return nRet;
// Expand the compressed data
nRet =TmpBuffer.ExpandRows(LeadBuffer, pLeadBitmap->GetWidth(), nLines) ;
if(nRet < 1)
return nRet;
pBuffer = (L_CHAR *)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
nRet =LeadBuffer.CompressRows( TmpBuffer, pLeadBitmap->GetWidth(), nLines);
if(nRet < 1)
return nRet;
// Put the inverted, compressed data back into the bitmap
nRet =pLeadBitmap->PutRowCompressed( LeadBuffer, nRow, nLines);
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;
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document