Compartir a través de


Color-Index Modo y Administración de paletas de Windows

El modo de índice de color especifica colores en una paleta lógica con un índice a una entrada de paleta lógica específica. La mayoría de los programas GDI usan paletas de índices de colores, pero el modo RGBA funciona mejor para OpenGL para varios efectos, como sombreado, iluminación, niebla y asignación de texturas. Si tener el color más verdadero no es crítico para la aplicación OpenGL, puede optar por usar el modo de índice de color (por ejemplo, para un mapa topográfico que usa "color falso" para resaltar el degradado de elevación).

Ejemplo de paleta de modo Color-Index

El código siguiente configura una estructura PIXELFORMATDESCRIPTOR que establece la marca del miembro iPixelType en PFD_TYPE_COLORINDEX. Esto especifica que la aplicación usa una paleta de índices de colores.

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