2
BITMAPINFO bmi;
memset(&bmi,0,sizeof(BITMAPINFO));
bmi.bmiHeader.biSize            = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth           =m_pImg->GetWidth();
bmi.bmiHeader.biHeight          =m_pImg->GetHeight();
bmi.bmiHeader.biPlanes          = 1;
//if(   m_pImg->GetInfo()->biBitCount!=16)  
//{
//  bmi.bmiHeader.biBitCount    =   m_pImg->GetInfo()->biBitCount;
//}
//else 
//{
//ASSERT((m_pImg->GetInfo())->bmiHeader->biBitCount == 24);
bmi.bmiHeader.biBitCount=24;
bmi.bmiHeader.biCompression     = BI_RGB;
if (bmi.bmiHeader.biSizeImage == 0)
    bmi.bmiHeader.biSizeImage =
    WidthBytes(bmi.bmiHeader.biWidth,bmi.bmiHeader.biBitCount) * bmi.bmiHeader.biHeight;
if(bmi.bmiHeader.biClrUsed == 0 && bmi.bmiHeader.biBitCount <16)
    bmi.bmiHeader.biClrUsed=DWORD(1 <<bmi.bmiHeader.biBitCount);
m_nNewSize=bmi.bmiHeader.biSizeImage;

if(m_hbmCanvasBitmap!=NULL)
{
    DeleteObject(m_hbmCanvasBitmap);
    m_hbmCanvasBitmap=NULL;
    m_pCanvasBits=NULL;
}
//  创建直接与DC相关联的位图
m_hbmCanvasBitmap=CreateDIBSection(m_hDC, &bmi, DIB_RGB_COLORS,(void**)&m_pCanvasBits, NULL, NULL); 

// 在 CreateDIBSection 之后我发现错误代码是 8,没有足够的资源。

我怎样才能避免这个错误?我通过宽度:3500 高度 2500 非常感谢!

4

2 回答 2

0

根本没有足够的内存来完成您的命令。您不能按原样“修复”它,除非尝试打破一些内存边界。

相反,您需要将您正在处理的任何图像拆分为可管理的大小,以便可以将它们换入和换出。

于 2009-09-18T01:47:11.137 回答
-1

我认为这个问题的答案与你之前的问题的答案是一样的:你的位图太大了。

此外,由于您的尺寸现在是您之前问题中位图尺寸的一半,我猜您正试图将目标分成象限,但现在您甚至没有足够的资源来创建目标位图。这可能意味着您也没有从之前的尝试中释放位图内存。您可能需要重新启动并使用更小的目标图像再次尝试所有这些。

于 2009-09-18T01:47:33.600 回答