CreateCompatibleBitmap的GetLastError返回錯誤碼8的原因及解決方案
阿新 • • 發佈:2019-01-23
使用CreateCompatibleBitmap建立點陣圖的時候,返回錯誤碼8:儲存空間不足,無法處理此命令。
原因:此函式建立點陣圖時用的是系統核心的分頁記憶體,這是稀有資源(可從工作管理員效能頁的核心記憶體項檢視),因此,如果點陣圖比較大的話,就報錯了。
解決方案:CreateDIBSection。
這個函式不再從系統核心的分頁記憶體中獲取資源了,而是從實體記憶體和虛擬記憶體中獲取,因此,原則上對點陣圖的大小限制要小得多。
附上一小段CreateDIBSection的用法示例:
BITMAPINFOHEADER bmih;
memset(&bmih, 0, sizeof(BITMAPINFOHEADER));
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biBitCount = 24;
bmih.biCompression = BI_RGB;
bmih.biPlanes = 1;
bmih.biWidth = info.nImageWidth;
bmih.biHeight = info.nImageHeight;
BITMAPINFO bmi;
memset(&bmi, 0, sizeof(BITMAPINFO));
bmi.bmiHeader = bmih;
void* p;
hBitmap = ::CreateDIBSection(cdc.GetSafeHdc(), &bmi, DIB_RGB_COLORS, &p, NULL, 0);