Available in LEADTOOLS Imaging Pro, Vector, Document, and Medical Imaging toolkits. |
#include "l_bitmap.h"
L_LTKRN_API L_INT L_GetPixelData(pBitmap, pData, nRow, nCol, uBytes)
pBITMAPHANDLE pBitmap; |
/* pointer to the bitmap handle */ |
L_VOID* pData; |
/* pointer to a buffer */ |
L_INT nRow; |
/* row number of the pixel */ |
L_INT nCol; |
/* column number of the pixel */ |
L_SIZE_T uBytes; |
/* size of the buffer */ |
Gets the data of the specified pixel. No transformations are performed on the pixel data.
Parameter |
Description |
pBitmap |
Pointer to the bitmap handle referencing the bitmap. |
pData |
Pointer to a buffer to be updated with the pixel data. This buffer should be able to store uBytes bytes. |
nRow |
The row number of the pixel. This is a zero-based value. |
nCol |
The column number of the pixel. This is a zero-based value. |
uBytes |
Size of the buffer pointed to by pData. The size should be large enough to contain the data for the pixel. The minimum size can be calculated with the following formula: (pBitmap->BitsPerPixel + 7) / 8. |
Returns
SUCCESS |
The function was successful. |
< 1 |
An error occurred. Refer to Return Codes. |
Comments
The bitmap's memory must be locked when you use this function. Normally, call L_AccessBitmap to lock the memory before starting an operation that uses this function and then call L_ReleaseBitmap when the operation is finished.
This function should be called only for 8, 16, 24, 32, 48 and 64-bit bitmaps. Here is how it works:
For 8-bit bitmaps, this function will retrieve the palette index for the specified pixel.
For 16-bit bitmaps, the function will retrieve the 2-byte value that forms the pixel.
For grayscale 16-bit bitmaps, the data will contain the gray value. LowBit and HighBit members of the BITMAPHANDLE structure indicate the valid pixel data.
For color 16-bit bitmaps, the data contains packed 5-bit R, G and B values. The high bit contains the alpha information. The Order member in BITMAPHANDLE structure determines whether the data is RGB or BGR.
For 24-bit bitmaps, the function will retrieve the 3 bytes containing the pixel color. The Order member in BITMAPHANDLE structure determines whether the data is RGB or BGR.
For 32-bit bitmaps, the function will retrieve the 4 bytes value that forms the pixel.
For grayscale 32-bit bitmaps, the 4 bytes will contain the entire 32-bit gray value.
For color 32-bit bitmaps, the first 3 bytes will contain the pixel color. The Order member in BITMAPHANDLE structure determines whether the data in the first 3 bytes is RGB or BGR. The 4th byte will contain the alpha channel information.
For 48-bit bitmaps, the function will retrieve the 6 bytes containing the pixel color. The Order member in BITMAPHANDLE structure determines whether the data is RGB or BGR. Each color component is stored as a 16-bit value, where 0 corresponds to black and 0xFFFF corresponds to full white.
For 64-bit bitmaps, the function will retrieve the 8 bytes containing the pixel color and alpha information. The Order member in BITMAPHANDLE structure determines whether the data in the first 6 bytes is RGB or BGR. Each color component is stored as a 16-bit value, where 0 corresponds to black and 0xFFFF corresponds to full white. The last two bytes contain the alpha information (also stored as a short value).
This function will return an error if uBytes is smaller than it should be. The minimum value for uBytes is indicated in a formula above.
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
Win32, x64.
See Also
Functions: |
L_AccessBitmap, L_ReleaseBitmap, L_GetBitmapRow, L_PutBitmapRow, L_GetBitmapRowCol, L_PutBitmapRowCol, L_GetPixelColor, L_PutPixelColor, L_PutPixelData |
Topics: |
|
|
Example
This example uses L_GetPixelData and L_PutPixelData to swap the R and G values for a particular pixel. This example will work only with 24, 32, 48 and 64-bit bitmaps.
L_INT GetPixelDataExample(pBITMAPHANDLE pBitmap, L_INT nRow, L_INT nCol) { L_INT nRet; L_UINT uVal; if(pBitmap->BitsPerPixel == 24 || pBitmap->BitsPerPixel == 32) { L_UCHAR aPixel[4]; // make it large enough for both bitmap types nRet = L_GetPixelData(pBitmap, aPixel, nRow, nCol, sizeof(aPixel)); if(nRet != SUCCESS) return nRet; // swap the R and B values uVal = aPixel[0]; aPixel[0] = aPixel[2]; aPixel[2] = (L_UCHAR)uVal; // put back the transformed pixel nRet = L_PutPixelData(pBitmap, aPixel, nRow, nCol, sizeof(aPixel)); if(nRet != SUCCESS) return nRet; } else if(pBitmap->BitsPerPixel == 48 || pBitmap->BitsPerPixel == 64) { L_UINT16 aPixel[4]; // make it large enough for both bitmap types nRet = L_GetPixelData(pBitmap, aPixel, nRow, nCol, sizeof(aPixel)); if(nRet != SUCCESS) return nRet; // swap the R and B values uVal = aPixel[0]; aPixel[0] = aPixel[2]; aPixel[2] = (L_UINT16)uVal; // put back the transformed pixel nRet = L_PutPixelData(pBitmap, aPixel, nRow, nCol, sizeof(aPixel)); if(nRet != SUCCESS) return nRet; } return SUCCESS; }