IWICFormatConverter::Initialize メソッド (wincodec.h)

書式コンバーターを初期化します。

構文

HRESULT Initialize(
  [in] IWICBitmapSource      *pISource,
  [in] REFWICPixelFormatGUID dstFormat,
  [in] WICBitmapDitherType   dither,
  [in] IWICPalette           *pIPalette,
  [in] double                alphaThresholdPercent,
  [in] WICBitmapPaletteType  paletteTranslate
);

パラメーター

[in] pISource

種類: IWICBitmapSource*

変換する入力ビットマップ

[in] dstFormat

型: REFWICPixelFormatGUID

変換先ピクセル形式の GUID。

[in] dither

種類: WICBitmapDitherType

変換に使用される WICBitmapDitherType

[in] pIPalette

種類: IWICPalette*

変換に使用するパレット。

[in] alphaThresholdPercent

型: double

変換に使用するアルファしきい値。

[in] paletteTranslate

種類: WICBitmapPaletteType

変換に使用するパレット変換の種類。

戻り値

型: HRESULT

このメソッドは、成功すると S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。

解説

定義済みのパレットがない場合は、最初に作成する必要があります。 InitializeFromBitmap を使用してパレット オブジェクトを作成し、他のパラメーターと共に渡します。

ditherpIPalettealphaThresholdPercentpaletteTranslate は、ビット深度の縮小形式に変換するときの色の損失を軽減するために使用されます。 これらの設定を必要としない変換の場合は、次のパラメーター値を使用する必要があります。 dither set to WICBitmapDitherTypeNonepIPalette set to NULLalphaThresholdPercent set to 0.0fpaletteTranslate set to WICBitmapPaletteTypeCustom

順序指定されたディザを使用する場合に関係する基本的なアルゴリズムには、 WICBitmapPaletteType 列挙で特定の順序で見つかった固定パレットが必要です。

多くの場合、出力用に提供される実際のパレットの順序が異なる場合や、実際の色に若干のバリエーションがある場合があります。 これは、Microsoft Windows パレットを使用する場合に当てはまるものです。この場合、これを提供 Windows.To のバージョン間で若干の違いがあり、書式コンバーターにパレットとパレットの翻訳が提供されます。 pIPalette は使用する実際のコピー先パレットで、paletteTranslate は固定パレットです。 変換が完了すると、最も近いカラー マッチング アルゴリズムを使用して、固定パレットから pIPalette の実際の色に色がマップされます。

pIPalette の色が paletteTranslate の色と密接に一致しない場合、マッピングによって望ましくない結果が発生する可能性があります。

WICBitmapDitherTypeOrdered4x4 は、色データを正確に変換する方法がないため、8 ビット形式から 5 ビット形式または 6 ビット形式への形式変換に役立ちます。

WICBitmapDitherTypeErrorDiffusion はエラー拡散アルゴリズムを選択し、任意のパレットで使用できます。 任意のパレットが指定されている場合は、 WICBitmapPaletteCustompaletteTranslate として渡す必要があります。 エラー拡散は、特に IWICPaletteの最適化されたパレット生成機能と組み合わせると、順序付けられたディザリングアルゴリズムと比較して優れた結果を提供します。

ポータブル ネットワーク グラフィックス (PNG) などのアルファ チャネルを持つビットマップを 8bpp に変換する場合、アルファ チャネルは通常無視されます。 元のビットマップで透明だったピクセルは、それぞれの形式で透明と黒の両方のピクセル値が 0 であるため、最終的な出力では黒として表示されます。

一部の 8bpp コンテンツにはアルファ色を含めることができます。たとえば、グラフィックス交換形式 (GIF) 形式では、1 つのパレット エントリを透明な色として使用できます。 この種類のコンテンツでは、 alphaThresholdPercent は透明色にマップする透明度の割合を指定します。 アルファ値はピクセルの不透明度 (透明度ではない) に直接比例するため、 alphaThresholdPercent は、完全に透明な色にマップされる不透明度のレベルを示します。

たとえば、9.8% は、アルファ値が 25 未満のピクセルが透明色にマップされることを意味します。 値が 100% の場合、完全に不透明ではないすべてのピクセルが透明色にマップされます。 パレットは透明な色を提供する必要があることに注意してください。 そうでない場合は、"透明" の色が 0 に最も近い色 (多くの場合は黒) になります。

次の例では、ディザリングまたはアルファしきい値なしで、イメージ フレームを 32bppPBGRA 形式に変換します。 Direct2D では、レンダリングのためにビットマップ ソースが 32bppPBGRA 形式である必要があります。 IWICFormatConverter の使用を示す完全なサンプルについては、「Direct2D サンプルを使用した WIC イメージ ビューアー」を参照してください。

HRESULT hr = S_OK;

IWICBitmapDecoder *pIDecoder = NULL;
IWICBitmapFrameDecode *pIDecoderFrame  = NULL;
IWICFormatConverter *pIFormatConverter = NULL;

// Create the decoder.
hr = m_pIWICFactory->CreateDecoderFromFilename(
   L"turtle.jpg",                  // Image to be decoded
   NULL,                           // Do not prefer a particular vendor
   GENERIC_READ,                   // Desired read access to the file
   WICDecodeMetadataCacheOnDemand, // Cache metadata when needed
   &pIDecoder                      // Pointer to the decoder
   );

// Retrieve the first bitmap frame.
if (SUCCEEDED(hr))
{
   hr = pIDecoder->GetFrame(0, &pIDecoderFrame);
}


// Create the flip/rotator.
if (SUCCEEDED(hr))
{
   hr = m_pIWICFactory->CreateFormatConverter(&pIFormatConverter);
}

// Initialize the format converter.
if (SUCCEEDED(hr))
{
   hr = pIFormatConverter->Initialize(
       pIDecoderFrame,                  // Input source to convert
       GUID_WICPixelFormat32bppPBGRA,   // Destination pixel format
       WICBitmapDitherTypeNone,         // Specified dither pattern
       NULL,                            // Specify a particular palette 
       0.f,                             // Alpha threshold
       WICBitmapPaletteTypeCustom       // Palette translation type
       );
}
//Create render target and D2D bitmap from IWICBitmapSource
if (SUCCEEDED(hr))
{
   hr = CreateDeviceResources(hWnd);
}

if (SUCCEEDED(hr))
{
   // Need to release the previous D2DBitmap if there is one
   SafeRelease(&m_pD2DBitmap);
   hr = m_pRT->CreateBitmapFromWicBitmap(pIFormatConverter, NULL, &m_pD2DBitmap);
}

SafeRelease(&pIFormatConverter);
SafeRelease(&pIDecoderFrame);
SafeRelease(&pIDecoder);

要件

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