Udostępnij za pośrednictwem


tryb Color-Index i zarządzanie paletą systemu Windows

Tryb indeksu kolorów określa kolory na palecie logicznej z indeksem do określonego wpisu palety logicznej. Większość programów GDI używa palet indeksu kolorów, ale tryb RGBA działa lepiej dla OpenGL w przypadku kilku efektów, takich jak cieniowanie, oświetlenie, mgła i mapowanie tekstur. Jeśli kolor truest nie ma krytycznego dla aplikacji OpenGL, możesz użyć trybu indeksu kolorów (na przykład w przypadku mapy topograficznej, która używa "fałszywego koloru", aby podkreślić gradient wysokości).

Przykład palety trybu Color-Index

Poniższy kod konfiguruje PIXELFORMATDESCRIPTOR struktury, która ustawia flagę elementu członkowskiego iPixelType na PFD_TYPE_COLORINDEX. Określa to, że aplikacja używa palety color-index.

BOOL bSetupPixelFormat(HDC hdc) 
{ 
    PIXELFORMATDESCRIPTOR pfd, *ppfd; 
    int pixelformat; 
 
    ppfd = &pfd; 
 
    ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR); 
    ppfd->nVersion = 1; 
    ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |  
                        PFD_DOUBLEBUFFER; 
    ppfd->dwLayerMask = PFD_MAIN_PLANE; 
 
    /* Set to color-index mode and use the default color palette. */ 
    ppfd->iPixelType = PFD_TYPE_COLORINDEX;  
 
    ppfd->cColorBits = 8; 
    ppfd->cDepthBits = 16; 
    ppfd->cAccumBits = 0; 
    ppfd->cStencilBits = 0; 
 
    pixelformat = ChoosePixelFormat(hdc, ppfd); 
 
    if ( (pixelformat = ChoosePixelFormat(hdc, ppfd)) == 0 ) 
    { 
        MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK); 
        return FALSE; 
    } 
 
    if (SetPixelFormat(hdc, pixelformat, ppfd) == FALSE) 
    { 
        MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK); 
        return FALSE; 
    } 
 
    return TRUE; 
}