L_GetBitmapRowCompressed
#include "l_bitmap.h"
L_INT EXT_FUNCTION L_GetBitmapRowCompressed(pBitmap, pWorkBuffer, pRunBuffer, nRow, nLines)
pBITMAPHANDLE pBitmap; |
/* pointer to the bitmap handle */ |
/* pointer to a work buffer */ | |
/* pointer to the target buffer */ | |
L_UINT nRow; |
/* number of the first row to retrieve */ |
L_UINT nLines; |
/* number of the rows to retrieve */ |
Retrieves one or more rows of 1-bit compressed data from a bitmap that has been loaded in its compressed format. This function is available in the Document/Medical Toolkits.
Parameter |
Description |
pBitmap |
Pointer to the bitmap handle referencing the bitmap to get the data from. |
pWorkBuffer |
NULL or a pointer to an optional work buffer. Allocating the work buffer speeds processing if you call this function more than once, because if you do not allocate a work buffer, the function allocates and frees a temporary buffer each time it is called. The size of this buffer should be the same as the bitmap handle's BytesPerLine field. |
pRunBuffer |
Pointer to the output buffer, which will be filled with 1-bit compressed image data. Calculate the required size of this buffer as follows: bytes required = nLines * ((bitmap width + 3) * 2). |
nRow |
Number of the first row to retrieve. |
nLines |
Number of rows to retrieve. |
Returns
SUCCESS |
The function was successful. |
< 1 |
An error occurred. Refer to Return Codes. |
Comments
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.
Required DLLs and Libraries
LTKRN 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
Windows 95 / 98 / Me, Windows 2000 / XP, Windows CE.
See Also
Functions: |
L_ExpandRow, L_CompressRow, L_GetBitmapRowColCompressed, L_PutBitmapRowColCompressed, L_PutBitmapRowCompressed |
Topics: |
Example
The following example is designed to work with bitmaps that have a bottom-left or top-left view perspective:
/* This example demonstrates the low-level functions for accessing
1-bit compressed bitmap 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. */
void TestLoad(L_TCHAR L_FAR * pszFilename, HWND hWnd)
{
BITMAPHANDLE LeadBitmap; /* Bitmap handle for the image */
L_UCHAR L_HUGE * pBuffer; /* Buffer to hold the expanded row */
L_UINT16 L_HUGE * pRunBuffer; /* Buffer to hold the compressed row */
HGLOBAL hBuffer; /* Handle to the pBuffer */
HGLOBAL hRunBuffer; /* Handle to the pRunBuffer */
L_INT n; /* Counters */
L_INT nRow = 0; /* first row to get */
L_INT nYSize = 50; /* # of rows to get */
L_INT nRet;
/* Load the bitmap, as compressed */
nRet = L_LoadFile(pszFilename,&LeadBitmap, sizeof(BITMAPHANDLE),1,0,
LOADFILE_COMPRESSED | LOADFILE_ALLOCATE | LOADFILE_STORE,
NULL, NULL, NULL, NULL);
/* if the ViewPerspective is not TOP_LEFT or BOTTOM_LEFT, make it TOP_LEFT */
/* Get/PutRow functions only work with TOP_LEFT or BOTTOM_LEFT */
if ( (LeadBitmap.ViewPerspective != TOP_LEFT)
|| (LeadBitmap.ViewPerspective != BOTTOM_LEFT) )
L_ChangeBitmapViewPerspective ( NULL, &LeadBitmap, sizeof(BITMAPHANDLE), TOP_LEFT );
if (LeadBitmap.ViewPerspective == BOTTOM_LEFT)
{
nRow = LeadBitmap.Height - nRow - nYSize;
}
/* Allocate the buffers */
hBuffer = GlobalAlloc(GMEM_MOVEABLE, (((LeadBitmap.Width + 31) &~31)/ 8) * nYSize);
pBuffer = (L_UCHAR L_FAR *)GlobalLock( hBuffer );
hRunBuffer = GlobalAlloc (GMEM_MOVEABLE, (L_UINT32)((LeadBitmap.Width + 3) * 2) * nYSize);
pRunBuffer = (L_UINT16 L_HUGE *)GlobalLock (hRunBuffer);
/* Access the bitmap */
L_AccessBitmap(&LeadBitmap);
/* Get the top nRow lines */
L_GetBitmapRowCompressed ( &LeadBitmap, NULL, pRunBuffer, nRow, nYSize );
/* Expand the compressed data */
L_ExpandRows( pRunBuffer, pBuffer, LeadBitmap.Width, nYSize);
/* Invert the data */
for(n=0; n < (L_INT)LeadBitmap.BytesPerLine * nYSize; n++)
pBuffer[n] = pBuffer[n] ^ 0xFF;
/* Compress the inverted data */
L_CompressRows( pRunBuffer, pBuffer, LeadBitmap.Width, nYSize);
/* Put the inverted, compressed data back into the bitmap */
L_PutBitmapRowCompressed ( &LeadBitmap, NULL, pRunBuffer, nRow, nYSize );
L_ReleaseBitmap(&LeadBitmap);
/* Free memory that we no longer need */
GlobalFree(hBuffer);
GlobalFree(hRunBuffer);
}