L_GetPixelData

#include "l_bitmap.h"

L_LTKRN_API L_INT L_GetPixelData(pBitmap, pData, nRow, nCol, uBytes)

Gets the data of the specified pixel. No transformations are performed on the pixel data.

Parameters

pBITMAPHANDLE pBitmap

Pointer to the bitmap handle referencing the bitmap.

L_VOID* pData

Pointer to a buffer to be updated with the pixel data. This buffer should be able to store uBytes bytes.

L_INT nRow

The row number of the pixel. This is a zero-based value.

L_INT nCol

The column number of the pixel. This is a zero-based value.

L_SIZE_T 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

Value Meaning
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:

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

Platforms

Win32, x64, Linux.

See Also

Functions

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 
      L_AccessBitmap(pBitmap); 
      nRet = L_GetPixelData(pBitmap, aPixel, nRow, nCol, sizeof(aPixel)); 
      L_ReleaseBitmap(pBitmap); 
      if(nRet != SUCCESS) 
         return nRet; 
      // swap the R and B values 
      uVal = aPixel[0]; aPixel[0] = aPixel[2]; aPixel[2] = (L_UCHAR)uVal; 
      L_AccessBitmap(pBitmap); 
      // put back the transformed pixel       
      nRet = L_PutPixelData(pBitmap, aPixel, nRow, nCol, sizeof(aPixel)); 
      L_ReleaseBitmap(pBitmap); 
      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 
      L_AccessBitmap(pBitmap); 
      nRet = L_GetPixelData(pBitmap, aPixel, nRow, nCol, sizeof(aPixel)); 
      L_ReleaseBitmap(pBitmap); 
      if(nRet != SUCCESS) 
         return nRet; 
      // swap the R and B values 
      uVal = aPixel[0]; aPixel[0] = aPixel[2]; aPixel[2] = (L_UINT16)uVal; 
      L_AccessBitmap(pBitmap); 
      // put back the transformed pixel 
      nRet = L_PutPixelData(pBitmap, aPixel, nRow, nCol, sizeof(aPixel)); 
      L_ReleaseBitmap(pBitmap); 
      if(nRet != SUCCESS) 
         return nRet; 
   } 
   return SUCCESS; 
} 

Help Version 20.0.2019.12.5
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2019 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Raster Imaging C API Help