Question

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

// après CreateDIBSection J'ai trouvé le code d'erreur 8, pas assez de ressources.

Comment puis-je éviter cette erreur? Je passe largeur: 3500 hauteur 2500 merci beaucoup!

Était-ce utile?

La solution

Je pense que la réponse à cette question est la même que la réponse à votre question précédente: vos bitmaps sont trop trop grandes.

De plus, comme vos dimensions correspondent maintenant à la moitié de celles du bitmap dans votre question précédente, je suppose que vous essayez de diviser la destination en quadrants, mais vous ne disposez plus de suffisamment de ressources pour créer le bitmap de destination. Cela peut signifier que vous ne libérez pas non plus la mémoire bitmap de vos tentatives précédentes. Vous voudrez peut-être redémarrer et réessayer tout cela avec beaucoup d'images de destination plus petites.

Autres conseils

Il n’ya tout simplement pas assez de mémoire pour terminer votre commande. Vous ne pouvez pas "réparer" tel quel, sauf pour essayer de casser une limite de mémoire.

Vous devez au contraire scinder l'image, sur laquelle vous travaillez, en tailles gérables, de manière à pouvoir les échanger.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top