iWICPalette 接口 (wincodec.h)

公开用于访问和生成颜色表的方法,主要用于索引像素格式。

继承

IWICPalette 接口继承自 IUnknown 接口。 IWICPalette 还具有以下类型的成员:

方法

IWICPalette 接口具有以下方法。

 
IWICPalette::GetColorCount

检索颜色表中的颜色数。
IWICPalette::GetColors

使用内部颜色表中的颜色填充所提供的颜色数组。 应根据 GetColorCount 的返回结果调整颜色数组的大小。
IWICPalette::GetType

检索描述调色板的 WICBitmapPaletteType。
IWICPalette::HasAlpha

指示调色板是否包含非不透明 (即 alpha 小于 1) 的条目。
IWICPalette::InitializeCustom

将调色板初始化为提供的自定义颜色条目。
IWICPalette::InitializeFromBitmap

使用基于引用位图的计算优化值初始化调色板。
IWICPalette::InitializeFromPalette

基于给定的调色板初始化调色板。
IWICPalette::InitializePredefined

将调色板初始化为由 WICBitmapPaletteType 指定的预定义调色板之一,并选择性地添加透明颜色。
IWICPalette::IsBlackWhite

检索一个值,该值描述调色板是否为黑白。
IWICPalette::IsGrayscale

检索一个值,该值描述调色板是否为灰度。

注解

如果 WICBitmapPaletteType 不是 WICBitmapPaletteCustom,则会根据上表自动生成颜色。 如果用户随后更改调色板条目,则 WICBitmapPalette 通过该操作将设置为 Custom。

InitializeFromBitmapfAddTransparentColor 参数将在颜色集合的末尾添加透明颜色(如果其大小小于 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 SP2、Windows Vista [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 wincodec.h