Ошибка CreateDIBSection - PullRequest
       12

Ошибка CreateDIBSection

2 голосов
/ 18 сентября 2009
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 большое спасибо!

Ответы [ 2 ]

0 голосов
/ 18 сентября 2009

Я думаю, что ответ на этот вопрос совпадает с ответом на ваш предыдущий вопрос: ваши растровые изображения way слишком большие.

Кроме того, поскольку ваши измерения теперь в два раза меньше размеров растрового изображения в вашем предыдущем вопросе, я предполагаю, что вы пытаетесь разбить пункт назначения на квадранты, но теперь у вас недостаточно ресурсов для создания целевое растровое изображение. Это может означать, что вы также не освобождаете растровую память от своих предыдущих попыток. Вы можете перезагрузиться и попробовать все это снова с намного меньшими целевыми изображениями.

0 голосов
/ 18 сентября 2009

Недостаточно памяти для выполнения команды. Вы не можете «исправить» это как есть, кроме как попытаться сломать некоторую границу памяти.

Скорее, вам нужно разделить любое изображение, над которым вы работаете, на управляемые размеры, чтобы их можно было менять и вставлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...