1. 程式人生 > >CreateCompatibleBitmap的GetLastError返回錯誤碼8的原因及解決方案

CreateCompatibleBitmap的GetLastError返回錯誤碼8的原因及解決方案

使用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);