应为使用 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
);
然而,用于接收数据lpvBits的缓冲区必须在调用GetDIBits之前分配,因为GetDIBits不会自动分配它。
问题是应该分配多少内存来接收DIB数据?假设HBITMAP的宽度和高度为Bmp_Width&Bmp_Height;位图是 32 位 (RGBA)。
我认为最简单的方法是调用 GetObject() 函数(顺便说一句,获取图像位):
BITMAP bmpObject;
GetObject(hBitmap, sizeof(BITMAP), &bmpObject);
然后您只需使用位图字段:
LONG size = bmpObject.bmWidthBytes * bmpObject.bmHeight;
处理图像字节时要注意对齐!
希望这会有所帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)