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

パレットがグレースケールかどうかを示す値を取得します。

注釈

WICBitmapPaletteTypeWICBitmapPaletteCustom でない場合は、上の表に基づいて色が自動的に生成されます。 ユーザーが後でカラー パレット エントリを変更した場合、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 ヘッダーの種類は 、WICColorUINT32 として定義します。

要件

要件
サポートされている最小のクライアント WINDOWS XP と SP2、Windows Vista [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー wincodec.h