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 はそのアクションによって 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 |