我遇到了一个有趣的问题:
- 通过 libjpeg 将大 (4500x6000) jpeg 加载到内存 (RGBRGBRGB....) 中(大约需要 200M 内存)
- CreateDIBitmap() 从数据中创建 HBITMAP
- 释放使用的内存
现在我发现该进程根本只使用了 5M 内存。我想知道 HBITMAP 的数据在哪里。(我禁用页面文件)
更新:
我编写这样的代码进行测试:
// initilise
BITMAP bitmap;
BITMAPINFO info;
// ....
void *data = NULL;
HDC hdc = ::GetDC(NULL);
HBITMAP hBitmap = ::CreateDIBSection(hdc, &info, DIB_RGB_COLORS, &data, NULL, 0);
::ReleaseDC(NULL, hdc);
if (hBitmap) {
::GetObject(m_hBitmap, sizeof(bitmap), &bitmap);
}
那么数据是0x2d0000(肯定在用户空间),bitmap.bmBits也是0x2d0000。所以我确保 CreateDIBSection 将用户空间内存用于位图。