Compartilhar via


Interface IWICPalette (wincodec.h)

Expõe métodos para acessar e criar uma tabela de cores, principalmente para formatos de pixel indexados.

Herança

A interface IWICPalette herda da interface IUnknown . IWICPalette também tem estes tipos de membros:

Métodos

A interface IWICPalette tem esses métodos.

 
IWICPalette::GetColorCount

Recupera o número de cores na tabela de cores.
IWICPalette::GetColors

Preenche a matriz de cores fornecida com as cores da tabela de cores interna. A matriz de cores deve ser dimensionada de acordo com os resultados de retorno de GetColorCount.
IWICPalette::GetType

Recupera o WICBitmapPaletteType que descreve a paleta.
IWICPalette::HasAlpha

Indica se a paleta contém uma entrada que não é opaca (ou seja, uma entrada com um alfa menor que 1).
IWICPalette::InitializeCustom

Inicializa uma paleta para as entradas de cores personalizadas fornecidas.
IWICPalette::InitializeFromBitmap

Inicializa uma paleta usando valores otimizados computados com base no bitmap de referência.
IWICPalette::InitializeFromPalette

Inicialize a paleta com base em uma determinada paleta.
IWICPalette::InitializePredefined

Inicializa a paleta para uma das paletas predefinidas especificadas por WICBitmapPaletteType e, opcionalmente, adiciona uma cor transparente.
IWICPalette::IsBlackWhite

Recupera um valor que descreve se a paleta é preta e branca.
IWICPalette::IsGrayscale

Recupera um valor que descreve se uma paleta é em escala de cinza.

Comentários

Se o WICBitmapPaletteType não for WICBitmapPaletteCustom, as cores serão geradas automaticamente com base na tabela acima. Se o usuário alterar posteriormente uma entrada de paleta de cores, WICBitmapPalette será definido como Personalizado por essa ação.

O parâmetro fAddTransparentColor de InitializeFromBitmap adicionará uma cor transparente ao final da coleção de cores se seu tamanho for menor que 256, caso contrário, o índice 255 será substituído pela cor transparente. Se um tipo de paleta predefinido for usado, ele será alterado para BitmapPaletteTypeCustom, pois não corresponde mais à paleta predefinida.

A interface de paleta é uma interface auxiliar de geração de imagens, pois não se refere diretamente a bitmaps e pixels; em vez disso, fornece tradução de cores indexada para bitmaps indexados. Para um formato de pixel indexado com M bits por pixels: (o número de cores na paleta) maior que 2^M.

Tradicionalmente, a operação básica da paleta é fornecer uma tradução de um índice de bytes (ou menor) em um valor de cor de 32bpp. Isso geralmente é feito por uma tabela de 256 entradas de valores de cor.

Exemplos

    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;

Neste código de exemplo, WICColor é definido como um valor UINT32 com este layout:

0xAARRGGBB

O tipo de cabeçalho wincodec.h define WICColor como UINT32.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP com SP2, Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho wincodec.h