begin process at 2012 02 11 00:34:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Conversion DIB vers DDB


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Conversion DIB vers DDB

jeudi 12 mai 2005 à 17:31:16 | Conversion DIB vers DDB

Chapi72

Bonjour,

je veux convertir une image BMP DIB en DDB. J'ai trouvé le code suivantqui marche bien jusqu'à un certain nombre d'utilisation (en gros 55fois) !

HBITMAP ConvertDIBDDB()
{
    LPBITMAPINFOHEADER    lpbi;
    HBITMAP    hbmDDBconv;
    CPalette    pal;
    CPalette*    pOldPal;
    CClientDC    dcDIB(NULL);
    CString infoCS;

    lpbi = (LPBITMAPINFOHEADER)pstBitmapInfo;

    int nColors = lpbi->biClrUsed ? lpbi->biClrUsed : 1 << lpbi->biBitCount;
   
    BITMAPINFO &bmInfo = *(LPBITMAPINFO)pstBitmapInfo;

    LPVOID lpDIBBits;
    if (bmInfo.bmiHeader.biBitCount > 8)
    {
        lpDIBBits =(LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) +((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3:0));
    }
    else
    {
        lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
        infoCS.Format("%d",bmInfo.bmiHeader.biBitCount);
    }
    if (nColors <= 256)
    {
        UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * nColors);
        LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];
        pLP->palVersion = 0x300;
        pLP->palNumEntries = nColors;
        for (int i = 0;i<nColors;i++)
        {
            pLP->palPalEntry[i].peRed = bmInfo.bmiColors[i].rgbRed;
            pLP->palPalEntry[i].peGreen = bmInfo.bmiColors[i].rgbGreen;
            pLP->palPalEntry[i].peBlue = bmInfo.bmiColors[i].rgbBlue;
            pLP->palPalEntry[i].peFlags = 0;   
        }
        pal.CreatePalette(pLP);
        delete[] pLP;
        pOldPal = dcDIB.SelectPalette(&pal,FALSE);
        dcDIB.RealizePalette();
    }
   
    hbmDDBconv =CreateDIBitmap(dcDIB.GetSafeHdc(),(LPBITMAPINFOHEADER)lpbi,(LONG)CBM_INIT,lpDIBBits,(LPBITMAPINFO)lpbi,DIB_RGB_COLORS);

    if (pal.GetSafeHandle())
        dcDIB.SelectPalette(pOldPal,FALSE);
   
    return hbmDDBconv;
}

J'ai essayé de surpprimer pal et pOldPal, le problème persite.
Parcontre, je n'arrive pas à supprimer le dcDIB (la compilation est OKmais il y a une erreur dans le pg : Debug Assertion Failed ...File:wingdi.cpp)

Quelqu'un a-t-il une idée SVP ?

Merci.



Cette discussion est classée dans : bminfo, plp, lpbi, dcdib, pal


Répondre à ce message

Sujets en rapport avec ce message



Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,172 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales