2009-09-18 4 views
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, ресурсов недостаточно.CreateDIBSection failed

Как я могу избежать этой ошибки? Пропуск ширина: 3500 высота 2500 много спасибо!

+1

Этот вопрос очень похож на http://stackoverflow.com/questions/1442162/stretchdibits-failed-sometimes-it-draw-nothing –

ответ

-1

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

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

+0

Спасибо! MusiGenesis – user25749

0

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

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

Смежные вопросы