应该使用GetDIBits函数为从HBITMAP接收的DIB数据分配多少内存?
MSDN中对GetDIBits函数的描述如下:
int GetDIBits(
__in HDC hdc,
__in HBITMAP hbmp,
__in UINT uStartScan,
__in UINT cScanLines,
__out LPVOID lpvBits,
__inout LPBITMAPINFO lpbi,
__in UINT uUsage
);
但是,必须在调用GetDIBits之前分配用于接收数据lpvBits的缓冲区,因为GetDIBits不会自动分配该缓冲区。
问题是应该分配多少内存来接收DIB数据?假设HBITMAP的width&height为Bmp_Width&Bmp_Height;位图是32位(RGBA)。
最佳答案
我认为最简单的方法是调用GetObject()函数(以及BTW以获取图像位):
BITMAP bmpObject;
GetObject(hBitmap, sizeof(BITMAP), &bmpObject);
然后,您只需使用位图字段:
LONG size = bmpObject.bmWidthBytes * bmpObject.bmHeight;
注意对齐对齐处理图像字节!
希望这会有所帮助!