www.pudn.com > VC写的MP3播放器源代码.zip > dibpal.cpp


///////////////////////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////////////////////// 
 
 
#include "stdafx.h" 
#include "dib256.h" 
#include "dibpal.h" 
 
CBmpPalette::CBmpPalette( CDIBitmap* pBmp ) 
{ 
    ASSERT( pBmp ); 
    int cPaletteEntries = pBmp->GetPalEntries(); 
    int cPalette = sizeof(LOGPALETTE) + 
                   sizeof(PALETTEENTRY) * cPaletteEntries; 
    // Since the LOGPALETTE structure is open-ended, you 
    // must dynamically allocate it, rather than using one 
    // off the stack. 
    LOGPALETTE* pPal = (LOGPALETTE*)new BYTE[cPalette]; 
    RGBQUAD*    pColorTab = pBmp->GetColorTablePtr(); 
    pPal->palVersion = 0x300; 
    pPal->palNumEntries = cPaletteEntries; 
    // Roll through the color table, and add each color to 
    // the logical palette. 
    for( int ndx = 0; ndx < cPaletteEntries; ndx++ ) 
    { 
        pPal->palPalEntry[ndx].peRed   = pColorTab[ndx].rgbRed; 
        pPal->palPalEntry[ndx].peGreen = pColorTab[ndx].rgbGreen; 
        pPal->palPalEntry[ndx].peBlue  = pColorTab[ndx].rgbBlue; 
        pPal->palPalEntry[ndx].peFlags = NULL; 
    } 
    VERIFY( CreatePalette( pPal ) ); 
    delete [] (BYTE*)pPal; 
}