最佳答案:
复制附加位图的位模式向指定的缓冲区。
详情介绍
复制附加位图的位模式向指定的缓冲区。

- 外文名
- GetBitmapBits
- 功能
- 将指定位图的位拷贝到缓冲区里
- 原型
- LONG GetBitmapBits
- 类别
- 计算机函数
GetBitmapBits函数功能
该函数将指定位图的位拷贝到缓冲区里。
函数原型:LONG GetBitmapBits(HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits);
GetBitmapBits参数
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;
LONG dl = GetBitmapBits(hBitmap, dwSize, pBits);
调试以上的代码,如果是大小为122X122,24位bmp图片, bitmap.bmWidthBytes = 368,
这里是因为位图中像素的位元是以行为单位对齐存储的,每一行的大小都向上取整为 4 字节(32位 DWORD)的倍数。
24位bmp图片,宽度122,所以每一行存储122*3=366,但是366不能被4整除,所以向上取整4倍数,即为368。


