IWICPalette 介面 (wincodec.h)
公開存取及建置色彩數據表的方法,主要是針對索引圖元格式。
繼承
IWICPalette 介面繼承自 IUnknown 介面。 IWICPalette 也有下列類型的成員:
方法
IWICPalette 介面具有這些方法。
IWICPalette::GetColorCount 擷取色彩表格中的色彩數目。 |
IWICPalette::GetColors 使用內部色彩數據表中的色彩填入提供的色彩陣列。 色彩數位應該根據 GetColorCount 的傳回結果來重設大小。 |
IWICPalette::GetType 擷取描述調色盤的 WICBitmapPaletteType。 |
IWICPalette::HasAlpha 指出調色盤是否包含非不透明 (的專案,也就是具有小於 1) alpha 的專案。 |
IWICPalette::InitializeCustom 將調色盤初始化為提供的自訂色彩專案。 |
IWICPalette::InitializeFromBitmap 使用以參考位圖為基礎的計算優化值,初始化調色盤。 |
IWICPalette::InitializeFromPalette 根據指定的調色盤初始化調色盤。 |
IWICPalette::InitializePredefined 將調色盤初始化為 WICBitmapPaletteType 所指定的其中一個預先定義的調色盤,並選擇性地新增透明色彩。 |
IWICPalette::IsBlackWhite 擷取值,這個值描述調色盤是否為黑色和白色。 |
IWICPalette::IsGrayscale 擷取值,這個值描述調色盤是否為灰階。 |
備註
如果 WICBitmapPaletteType 不是 WICBitmapPaletteCustom,則會根據上表自動產生色彩。 如果使用者後續變更調色盤專案,WICBitmapPalette 會設定為該動作的 [自定義]。
如果大小小於 256,InitializeFromBitmap 的 fAddTransparentColor 參數會將透明色彩新增至色彩集合的結尾,否則索引 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 |