请输入您要查询的百科知识:

 

词条 GetBitmapBits
释义

函数功能:该函数将指定位图的位拷贝到缓冲区里。

函数原型:LONG GetBitmapBits(HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits);

参数:

hbmp:指向感兴趣的位图的句柄。

cbBuffer:指定要从位图拷贝到缓冲区的字节数。

lpvBits:指向接收位图位数据的缓冲区指针。这些位是按字节类型存储在数组中的。

返回值:如果该函数执行成功,那么返回值就是拷贝到缓冲区的字节数;如果该函数执行失败,那么返回值为0。

Windows NT:若想获得更多错误信息,请调用GetLastError函数。

请注意,我发现在WIN7系统上,这个函数返回的copy字节数并不总是等于bitmap.bmHeight * bitmap.bmWidthBytes 。

BITMAP bitmap;

GetObject(hBitmap, sizeof(BITMAP), &bitmap);

DWORD dwSize = bitmap.bmHeight * bitmap.bmWidthBytes;

unsigned char* pBits = new unsigned char[dwSize];

LONG dl = GetBitmapBits(hBitmap, dwSize, pBits);

调试以上的代码,如果是大小为122X122,24位bmp图片, bitmap.bmWidthBytes = 368,

那么 dwSize = 122*368=44896,而返回值 dl=44652,两者不相等。

由此反推,真正的 bmWidthBytes = dl/bmHeight =44652/122=366 。

这个问题何时产生的,已经无法考证了。

但是MSDN上,该函数有一句说明:

Note This function is provided only for compatibility with 16-bit versions of Windows. Applications should use the GetDIBits function.

那么,我想,我们也许应该使用新的函数了。

ps:

366/122=3个字节 正好是 24位

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/11 1:07:51