Поделиться через


Интерфейс IWICPalette (wincodec.h)

Предоставляет методы для доступа к таблице цветов и создания ее, в основном для индексированных форматов пикселей.

Наследование

Интерфейс IWICPalette наследуется от интерфейса IUnknown . IWICPalette также имеет следующие типы элементов:

Методы

Интерфейс IWICPalette содержит следующие методы.

 
IWICPalette::GetColorCount

Извлекает количество цветов в таблице цветов.
IWICPalette::GetColors

Заполняет предоставленный массив цветов цветами из внутренней таблицы цветов. Размер массива цветов должен соответствовать возвращаемым результатам getColorCount.
IWICPalette::GetType

Извлекает wicBitmapPaletteType, описывающий палитру.
IWICPalette::HasAlpha

Указывает, содержит ли палитра непрозрачную запись (то есть запись с альфа-значением меньше 1).
IWICPalette::InitializeCustom

Инициализирует палитру предоставленными пользовательскими записями цвета.
IWICPalette::InitializeFromBitmap

Инициализирует палитру с помощью вычисляемых оптимизированных значений на основе растрового изображения ссылки.
IWICPalette::InitializeFromPalette

Инициализируйте палитру на основе заданной палитры.
IWICPalette::InitializePredefined

Инициализирует палитру одной из предварительно определенных палитр, заданных WICBitmapPaletteType, и при необходимости добавляет прозрачный цвет.
IWICPalette::IsBlackWhite

Извлекает значение, указывающее, является ли палитра черно-белой.
IWICPalette::IsGrayscale

Извлекает значение, указывающее, имеет ли палитра оттенки серого.

Комментарии

Если WICBitmapPaletteType не является WICBitmapPaletteCustom, цвета автоматически создаются на основе приведенной выше таблицы. Если пользователь впоследствии изменяет запись цветовой палитры, wicBitmapPalette будет установлен в Пользовательский с помощью этого действия.

Параметр fAddTransparentColorinitializeFromBitmap добавит прозрачный цвет в конец коллекции цветов, если его размер меньше 256, в противном случае индекс 255 будет заменен прозрачным цветом. Если используется предварительно определенный тип палитры, он изменится на BitmapPaletteTypeCustom, так как он больше не соответствует предопределенной палитре.

Интерфейс палитры является вспомогательным интерфейсом для создания изображений, так как он не относится непосредственно к растровым изображениям и пикселям; вместо этого он обеспечивает преобразование индексированного цвета для индексированных растровых изображений. Для индексированного формата пикселей с битами M на пиксели: (количество цветов в палитре) больше 2^M.

Обычно основной операцией палитры является перевод из байтового (или меньшего) индекса в значение цвета 32bpp. Это часто достигается с помощью 256 входной таблицы значений цветов.

Примеры

    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;

В этом примере кода WICColor определяется как значение UINT32 с таким макетом:

0xAARRGGBB

Заголовок wincodec.h определяет тип WICColor как UINT32.

Требования

Требование Значение
Минимальная версия клиента Windows XP с пакетом обновления 2 (SP2), Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header wincodec.h