Condividi tramite


Interfaccia IWICPalette (wincodec.h)

Espone metodi per l'accesso e la creazione di una tabella colori, principalmente per i formati pixel indicizzati.

Ereditarietà

L'interfaccia IWICPalette eredita dall'interfaccia IUnknown . IWICPalette include anche questi tipi di membri:

Metodi

L'interfaccia IWICPalette include questi metodi.

 
IWICPalette::GetColorCount

Recupera il numero di colori nella tabella dei colori.
IWICPalette::GetColors

Compila la matrice di colori fornita con i colori della tabella colori interna. La matrice di colori deve essere ridimensionata in base ai risultati restituiti da GetColorCount.
IWICPalette::GetType

Recupera WICBitmapPaletteType che descrive la tavolozza.
IWICPalette::HasAlpha

Indica se la tavolozza contiene una voce non opaca, ovvero una voce con un valore alfa minore di 1.
IWICPalette::InitializeCustom

Inizializza una tavolozza per le voci di colore personalizzate specificate.
IWICPalette::InitializeFromBitmap

Inizializza una tavolozza usando valori ottimizzati calcolati in base alla bitmap di riferimento.
IWICPalette::InitializeFromPalette

Inizializzare la tavolozza in base a una determinata tavolozza.
IWICPalette::InitializePredefined

Inizializza la tavolozza in una delle tavolozze predefinite specificate da WICBitmapPaletteType e, facoltativamente, aggiunge un colore trasparente.
IWICPalette::IsBlackWhite

Recupera un valore che descrive se la tavolozza è nera e bianca.
IWICPalette::IsGrayscale

Recupera un valore che descrive se una tavolozza è in scala grigia.

Commenti

Se WICBitmapPaletteType non è WICBitmapPaletteCustom, i colori vengono generati automaticamente in base alla tabella precedente. Se l'utente modifica successivamente una voce della tavolozza colori, WICBitmapPalette è impostata su Personalizzato in base a tale azione.

Il parametro fAddTransparentColor di InitializeFromBitmap aggiungerà un colore trasparente alla fine dell'insieme di colori se la dimensione è inferiore a 256, in caso contrario, l'indice 255 verrà sostituito con il colore trasparente. Se viene usato un tipo di tavolozza predefinito, verrà modificato in BitmapPaletteTypeCustom perché non corrisponde più alla tavolozza predefinita.

L'interfaccia della tavolozza è un'interfaccia di immagine ausiliaria in cui non riguarda direttamente le bitmap e i pixel; fornisce invece la traduzione dei colori indicizzata per le bitmap indicizzate. Per un formato pixel indicizzato con bit M per pixel: (numero di colori nella tavolozza) maggiore di 2^M.

Tradizionalmente l'operazione di base della tavolozza consiste nel fornire una traduzione da un indice byte (o minore) in un valore di colore 32bpp. Questa operazione viene spesso eseguita da una tabella di 256 voci di valori di colore.

Esempio

    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;

In questo codice di esempio WICColor viene definito come valore UINT32 con questo layout:

0xAARRGGBB

Il tipo di intestazione wincodec.h definisce WICColor come UINT32.

Requisiti

Requisito Valore
Client minimo supportato Windows XP con SP2, Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione wincodec.h