#include "l_bitmap.h"
L_LTKRN_API L_INT L_GetBitmapRowCompressed(pBitmap, pWorkBuffer, pRunBuffer, nRow, nLines)
pBITMAPHANDLE pBitmap; |
pointer to the bitmap handle |
L_UCHAR* pWorkBuffer; |
pointer to a work buffer |
L_UINT16* pRunBuffer; |
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.
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. |
SUCCESS |
The function was successful. |
< 1 |
An error occurred. Refer to Return Codes. |
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
|
For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application. |
Win32, x64, Linux.
Functions: |
L_ExpandRow, L_CompressRow, L_GetBitmapRowColCompressed, L_PutBitmapRowColCompressed, L_PutBitmapRowCompressed |
Topics: |
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.
L_INT GetBitmapRowCompressedExample(L_TCHAR* pszFilename,HWND hWnd){UNREFERENCED_PARAMETER(hWnd);BITMAPHANDLE LeadBitmap; /* Bitmap handle for the image */L_UCHAR* pBuffer; /* Buffer to hold the expanded row */L_UINT16* 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(nRet != SUCCESS)return nRet;/* 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*)GlobalLock( hBuffer );hRunBuffer = GlobalAlloc (GMEM_MOVEABLE, (L_UINT32)((LeadBitmap.Width + 3) * 2) * nYSize);pRunBuffer = (L_UINT16*)GlobalLock (hRunBuffer);/* Access the bitmap */L_AccessBitmap(&LeadBitmap);/* Get the top nRow lines */nRet = L_GetBitmapRowCompressed ( &LeadBitmap, NULL, pRunBuffer, nRow, nYSize );if(nRet != SUCCESS)return nRet;/* Expand the compressed data */nRet = L_ExpandRows( pRunBuffer, pBuffer, LeadBitmap.Width, nYSize);if(nRet != SUCCESS)return nRet;/* Invert the data */for(n=0; n < (L_INT)LeadBitmap.BytesPerLine * nYSize; n++)pBuffer[n] = pBuffer[n] ^ 0xFF;/* Compress the inverted data */nRet = L_CompressRows( pRunBuffer, pBuffer, LeadBitmap.Width, nYSize);if(nRet != SUCCESS)return nRet;/* Put the inverted, compressed data back into the bitmap */nRet = L_PutBitmapRowCompressed ( &LeadBitmap, NULL, pRunBuffer, nRow, nYSize );if(nRet != SUCCESS)return nRet;L_ReleaseBitmap(&LeadBitmap);/* Free memory that we no longer need */GlobalFree(hBuffer);GlobalFree(hRunBuffer);L_FreeBitmap(&LeadBitmap);return SUCCESS;}
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
