Share via


Interface IWICPalette (wincodec.h)

Expose des méthodes d’accès et de création d’une table de couleurs, principalement pour les formats de pixels indexés.

Héritage

L’interface IWICPalette hérite de l’interface IUnknown. IWICPalette a également les types de membres suivants :

Méthodes

L’interface IWICPalette a ces méthodes.

 
IWICPalette ::GetColorCount

Récupère le nombre de couleurs dans le tableau de couleurs.
IWICPalette ::GetColors

Remplit le tableau de couleurs fourni avec les couleurs de la table de couleurs interne. Le tableau de couleurs doit être dimensionné en fonction des résultats retournés par GetColorCount.
IWICPalette ::GetType

Récupère le WICBitmapPaletteType qui décrit la palette.
IWICPalette ::HasAlpha

Indique si la palette contient une entrée non opaque (c’est-à-dire une entrée avec une valeur alpha inférieure à 1).
IWICPalette ::InitializeCustom

Initialise une palette aux entrées de couleur personnalisées fournies.
IWICPalette ::InitializeFromBitmap

Initialise une palette à l’aide d’une valeur optimisée calculée basée sur la bitmap de référence.
IWICPalette ::InitializeFromPalette

Initialisez la palette en fonction d’une palette donnée.
IWICPalette ::InitializePredefined

Initialise la palette dans l’une des palettes prédéfinies spécifiées par WICBitmapPaletteType et ajoute éventuellement une couleur transparente.
IWICPalette ::IsBlackWhite

Récupère une valeur qui indique si la palette est en noir et blanc.
IWICPalette ::IsGrayscale

Récupère une valeur qui indique si une palette est en nuances de gris.

Remarques

Si WICBitmapPaletteType n’est pas WICBitmapPaletteCustom, les couleurs sont générées automatiquement en fonction du tableau ci-dessus. Si l’utilisateur modifie par la suite une entrée de palette de couleurs, WICBitmapPalette est défini sur Personnalisé par cette action.

Le paramètre fAddTransparentColord’InitializeFromBitmap ajoute une couleur transparente à la fin de la collection de couleurs si sa taille est inférieure à 256, sinon l’index 255 est remplacé par la couleur transparente. Si un type de palette prédéfini est utilisé, il passe à BitmapPaletteTypeCustom, car il ne correspond plus à la palette prédéfinie.

L’interface de palette est une interface d’imagerie auxiliaire en ce qu’elle ne concerne pas directement les bitmaps et les pixels ; il fournit plutôt une traduction de couleurs indexée pour les bitmaps indexées. Pour un format de pixel indexé avec M bits par pixels : (nombre de couleurs dans la palette) supérieur à 2^M.

Traditionnellement, l’opération de base de la palette consiste à fournir une traduction d’un index d’octets (ou plus petit) en une valeur de couleur de 32 bpp. Cela est souvent accompli par une table de 256 entrées de valeurs de couleur.

Exemples

    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;

Dans cet exemple de code, WICColor est défini en tant que valeur UINT32 avec cette disposition :

0xAARRGGBB

Le type d’en-tête wincodec.h définit WICColor comme UINT32.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP avec SP2, Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête wincodec.h