词条 | 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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。