ブレンド効果
ブレンド効果を使用して、2 つの画像を結合します。 この効果には、26 のブレンド モードがあります。
この効果の CLSID は CLSID_D2D1Blend です。
ブレンドの例
ブレンド効果のすべてのブレンド モードの画像例を次に示します。 ブレンド モードと対応するモード プロパティの完全な一覧については、次のセクションで説明します
除外モードを使用する別の例を次に示します。
前の画像 1 |
---|
前の画像 2 |
クリック後 |
ComPtr<ID2D1Effect> blendEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Blend, &blendEffect);
blendEffect->SetInput(0, bitmap);
blendEffect->SetInput(1, bitmapTwo);
blendEffect->SetValue(D2D1_BLEND_PROP_MODE, D2D1_BLEND_MODE_EXCLUSION);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(blendEffect.Get());
m_d2dContext->EndDraw();
効果のプロパティ
表示名とインデックス一覧 | 説明 |
---|---|
モード D2D1_BLEND_PROP_MODE |
効果に使用されるブレンド モード。 詳細については、「ブレンド モード」を参照してください。 型は D2D1_BLEND_MODE です。 既定値は D2D1_BLEND_MODE_MULTIPLY です。 |
ブレンド モード
次の表に、この効果のすべてのブレンド モードを示します。 効果の出力を計算するために必要なヘルパー関数は、次のセクションにあります。
色: OPRGB = f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)
アルファ: OA = FA * (1 - BA) + BA
ここで:
- OPRGB は、乗算済みの出力色です
- OA は、出力アルファです
- BRGB は、乗算済みではない出力先の色です
- BA は、出力先のアルファです
- FRGB は、乗算済みではないソースの色です
- FA は、ソース アルファです
- f(SRGB, DRGB) は、ブレンド モードごとに異なるブレンド関数です
一部のブレンド モードでは、色相、彩度、明度 (HSL) 色空間から RGB への変換が必要です。
列挙 | 方程式 |
---|---|
D2D1_BLEND_MODE_DARKEN | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_MULTIPLY | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_COLOR_BURN | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_LINEAR_BURN | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_DARKER_COLOR | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_LIGHTEN | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_SCREEN | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_COLOR_DODGE | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_LINEAR_DODGE | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_LIGHTER_COLOR | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_OVERLAY | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_SOFT_LIGHT | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_HARD_LIGHT | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_VIVID_LIGHT | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_LINEAR_LIGHT | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_PIN_LIGHT | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_HARD_MIX | f(FRGB, BRGB) = を使用した基本ブレンド式 |
D2D1_BLEND_MODE_DIFFERENCE | f(FRGB, BRGB) = abs(FRGB - BRGB) を使用した基本ブレンド式 |
D2D1_BLEND_MODE_EXCLUSION | f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB を使用した基本ブレンド式 |
D2D1_BLEND_MODE_HUE | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_SATURATION | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_COLOR | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_LUMINOSITY | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_DISSOLVE | たとえば、以下のように指定したとします。
|
D2D1_BLEND_MODE_SUBTRACT | アルファのみの基本ブレンド式。 |
D2D1_BLEND_MODE_DIVISION | アルファのみの基本ブレンド式。 |
Note
すべてのブレンド モードで、出力値は乗算済みになり、[0, 1] の範囲にクランプされます。
HSL 色空間の変換
明度コンポーネントは、次の RGB 重みを使用して計算されます。
- kR = 0.30
- kG = 0.59
- kB = 0.11
RGB から HSL への変換
これにより、S と L は範囲 [0.0, 1.0] に、H は範囲 [-1.0, 5.0] に配置されます。
HSL から RGB への変換
もう一方の方法を変換するには、前の計算の逆関数を使用します。
S = 0 の場合、R = G = B = L
それ以外の場合は、次の 6 つの色相に依存するケースがあります。
H が 0 より大きい場合、値は赤/マゼンタのセクター (R>B>G) にあります。
H が 0 以上 1 未満の場合、値は赤/黄色のセクター (R>G>B) にあります。
H が 1 以上 2 未満の場合、値は黄色/緑のセクター (G>R>B) にあります。
H が 2 以上 3 未満の場合、値は緑/シアンのセクター (G>B>R) にあります。
H が 3 以上 4 未満の場合、値はシアン/青のセクター (B>G>R) にあります。
H が 4 以上の場合、値は青/マゼンタのセクター (B>R>G) にあります。
ブレンド モードでは、2 つの異なる色から HSL コンポーネントを任意に組み合わせることができるため、変換された RGB 値が色域外にあるのが一般的です。つまり、1 つ以上のチャネル コンポーネントが [0.0, 1.0] の有効範囲外である可能性があります。 これらの色は、彩度を最小限に抑えながら、色相と明度の両方を維持することで、色域に戻されます。
出力ビットマップ
この効果の出力ビットマップは、常に 2 つの入力画像の結合のサイズです。
サンプル コード
この効果の例については、Direct2D 複合効果モードのサンプルをダウンロードしてください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 および Windows 7 [デスクトップ アプリ | Windows ストア アプリ] 用の プラットフォーム更新プログラム |
サポートされている最小のサーバー | Windows 8 および Windows 7 [デスクトップ アプリ | Windows ストア アプリ] 用の プラットフォーム更新プログラム |
ヘッダー | d2d1effects.h |
ライブラリ | d2d1.lib、dxguid.lib |