在做CDC双缓冲时CreateCompatibleBitmap 创建位图, 但是发现当位图特别大时, 就返回0 创建失败, 查询错误码是8 内存不足
虽然位图比较大, 但还没有到内存不足的地步啊!!!
查询得到:
CreateCompatibleBitmap 创建位图使用的的是系统内核的分页内存,这是稀有资源。
替代方法是:
CreateDIBSection 它使用虚拟内存创建位图.
<<Windows 图形编程>> 作者 袁峰 这本书有介绍
创建步骤如下:
BITMAPINFOHEADER bmih;
memset(&bmih, 0, sizeof(BITMAPINFOHEADER));
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biBitCount = 24;
bmih.biCompression = BI_RGB;
bmih.biPlanes = 1;
bmih.biWidth = m_nBitmapWidth;
bmih.biHeight = m_nBitmapHeight;
BITMAPINFO bmi;
memset(&bmi, 0, sizeof(BITMAPINFO));
bmi.bmiHeader = bmih;
void* p;
HBITMAP bitMap = ::CreateDIBSection(pDC->m_hDC, &bmi, DIB_RGB_COLORS, &p, NULL, 0);
我试过了 的确没报错, 但是位图比较大的时候创建好像有点慢.