Freigeben über


Color-Index Modus und Windows-Palettenverwaltung

Der Farbindexmodus gibt Farben in einer logischen Palette mit einem Index für einen bestimmten Eintrag in der Logischen Palette an. Die meisten GDI-Programme verwenden Farbindexpaletten, aber der RGBA-Modus eignet sich besser für OpenGL für mehrere Effekte, z. B. Schattierung, Beleuchtung, Nebel und Texturzuordnung. Wenn die wahrste Farbe für Ihre OpenGL-Anwendung nicht von entscheidender Bedeutung ist, können Sie den Farbindexmodus verwenden (z. B. für eine topografische Karte, die "falsche Farbe" verwendet, um den Höhenverlauf hervorzuheben).

Beispiel für Color-Index Moduspalette

Der folgende Code richtet eine PIXELFORMATDESCRIPTOR- Struktur ein, die das Flag des iPixelType--Elements auf PFD_TYPE_COLORINDEX festlegt. Dadurch wird angegeben, dass die Anwendung eine Farbindexpalette verwendet.

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