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。
InitializeFromBitmap 的 fAddTransparentColor 参数将在颜色集合的末尾添加透明颜色(如果其大小小于 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 |