CreateDIBSection失败
-
22-07-2019 - |
题
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 非常感谢!
解决方案
我认为这个问题的答案是一样的回答你刚才的问题:你的位图的办法的过大
此外,由于你的尺寸现在在你刚才的问题位图的一半尺寸,我猜你正在试图向上突破目标成象限,但现在你没有足够的资源,甚至创建目标位。这可能意味着你还没有释放从以前的尝试位图的内存。您可能需要重新启动,并与多的较小的目的地形象再次尝试这一切。
其他提示
有根本没有足够的内存来完成你的命令。你不能“修复”它是,除了尝试和突破一些内存边界。
相反,你需要拆分的任何图像您的工作分成可管理的大小,这样他们就可以在被换进出。
不隶属于 StackOverflow