Compartir a través de


Interfaz IWICPalette (wincodec.h)

Expone métodos para acceder y crear una tabla de colores, principalmente para formatos de píxeles indexados.

Herencia

La interfaz IWICPalette hereda de la interfaz IUnknown . IWICPalette también tiene estos tipos de miembros:

Métodos

La interfaz IWICPalette tiene estos métodos.

 
IWICPalette::GetColorCount

Recupera el número de colores de la tabla de colores.
IWICPalette::GetColors

Rellena la matriz de colores proporcionada con los colores de la tabla de colores interna. La matriz de colores debe tener el tamaño según los resultados devueltos de GetColorCount.
IWICPalette::GetType

Recupera el WICBitmapPaletteType que describe la paleta.
IWICPalette::HasAlpha

Indica si la paleta contiene una entrada que no es opaca (es decir, una entrada con un alfa menor que 1).
IWICPalette::InitializeCustom

Inicializa una paleta en las entradas de color personalizadas proporcionadas.
IWICPalette::InitializeFromBitmap

Inicializa una paleta con valores optimizados calculados en función del mapa de bits de referencia.
IWICPalette::InitializeFromPalette

Inicialice la paleta en función de una paleta determinada.
IWICPalette::InitializePredefined

Inicializa la paleta en una de las paletas predefinidas especificadas por WICBitmapPaletteType y, opcionalmente, agrega un color transparente.
IWICPalette::IsBlackWhite

Recupera un valor que describe si la paleta es blanca y negra.
IWICPalette::IsGrayscale

Recupera un valor que describe si una paleta es escala de grises.

Comentarios

Si WICBitmapPaletteType no es WICBitmapPaletteCustom, los colores se generan automáticamente en función de la tabla anterior. Si el usuario cambia posteriormente una entrada de paleta de colores, WICBitmapPalette se establece en Personalizado por esa acción.

El parámetro fAddTransparentColor de InitializeFromBitmap agregará un color transparente al final de la colección de colores si su tamaño es inferior a 256; de lo contrario, el índice 255 se reemplazará por el color transparente. Si se usa un tipo de paleta predefinido, cambiará a BitmapPaletteTypeCustom, ya que ya no coincide con la paleta predefinida.

La interfaz de paleta es una interfaz auxiliar de creación de imágenes en que no afecta directamente a los mapas de bits y píxeles; en su lugar, proporciona traducción de colores indizada para mapas de bits indexados. Para un formato de píxel indizado con bits M por píxeles: (El número de colores de la paleta) mayor que 2^M.

Tradicionalmente, la operación básica de la paleta es proporcionar una traducción de un índice de byte (o más pequeño) en un valor de color de 32bpp. Esto suele lograrse mediante una tabla de entrada de 256 valores de color.

Ejemplos

    IWICImagingFactory *pFactory = NULL;
    IWICBitmapDecoder *pDecoder = NULL;
    IWICBitmapFrameDecode *pBitmapFrameDecode = NULL;
    IWICPalette *pPalette = NULL;

    UINT uiFrameCount = 0;

    HRESULT hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_IWICImagingFactory,
        (LPVOID*)&pFactory
        );

    if (SUCCEEDED(hr))
    {
        hr = pFactory->CreateDecoderFromFilename(
                           L"test.gif",
                           NULL,
                           GENERIC_READ,
                           &pDecoder);
    }

    if (SUCCEEDED(hr))
    {
        hr = pDecoder->GetFrameCount(&uiFrameCount);
    }

    if (SUCCEEDED(hr) && (uiFrameCount > 0))
    {
        hr = pDecoder->GetFrame(0, &pBitmapFrameDecode);

        if (SUCCEEDED(hr))
        {
            hr = pFactory->CreatePalette(&pPalette);
        }

        if (SUCCEEDED(hr))
        {
            hr = pBitmapFrameDecode->CopyPalette(pPalette);
        }

        if (SUCCEEDED(hr))
        {
            UINT uiColorCount = 0;
            UINT uiActualColorCount = 0;
            WICColor *pColors = NULL;

            hr = pPalette->GetColorCount(&uiColorCount);

            if (SUCCEEDED(hr) && (uiColorCount > 0))
            {
                pColors = new WICColor[uiColorCount];

                if (pColors)
                {
                    hr = pPalette->GetColors(uiColorCount, pColors, &uiActualColorCount);

                    // Do something with the colors here...

                    delete[] pColors;
                }
                else
                {
                    hr = E_OUTOFMEMORY;
                }
            }
        }
    }

    if (pPalette)
    {
        pPalette->Release();
    }

    if (pBitmapFrameDecode)
    {
        pBitmapFrameDecode->Release();
    }

    if (pDecoder)
    {
        pDecoder->Release();
    }

    if (pFactory)
    {
        pFactory->Release();
    }

    return hr;

En este código de ejemplo, WICColor se define como un valor UINT32 con este diseño:

0xAARRGGBB

El tipo de encabezado wincodec.h define WICColor como UINT32.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP con SP2, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincodec.h