How much memory should be allocated for the DIB data received from HBITMAP using GetDIBits function?
The GetDIBits function is described in MSDN as follow:
int GetDIBits(
__in HDC hdc,
__in HBITMAP hbmp,
__in UINT uStartScan,
__in UINT cScanLines,
__out LPVOID lpvBits,
__inout LPBITMAPINFO lpbi,
__in UINT uUsage
);
However, the buffer to receive data lpvBits must be allocated before calling GetDIBits, because GetDIBits doesn't allocate this automatically.
The question is how much memory should be allocated to receive the DIB data? Supposed that the HBITMAP has width&height as Bmp_Width&Bmp_Height; and the bitmap is 32-bit (RGBA).
I think the simplest way is calling GetObject() function (And BTW to get the image bits):
BITMAP bmpObject;
GetObject(hBitmap, sizeof(BITMAP), &bmpObject);
Then you simply use the Bitmap Fields:
LONG size = bmpObject.bmWidthBytes * bmpObject.bmHeight;
Be aware of alignment whem processing image bytes!
Hope this will be helpful!