混合效果
使用混合效果來結合 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,B RGB) * FA * B A + FRGB * FA * (1 - B A) + BRGB * BA * (1 - FA)
Alpha:OA = FA * (1 - BA) + BA
其中:
- OPRGB 是預乘的輸出色彩
- OA 為輸出 Alpha
- BRGB 是未預乘的目的地色彩
- BA 是目的地 Alpha
- FRGB 是未預乘的來源色彩
- FA 是來源 Alpha
- f(SRGB, DRGB) 是一種混合函式,會因混合模式而異
某些混合模式需要從色調、飽和度、亮度(HSL)色彩空間轉換成 RGB。
列舉型別 | 方程 |
---|---|
D2D1_BLEND_MODE_DARKEN | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_MULTIPLY | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_COLOR_BURN | 基本混合公式與 f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_BURN | 基本混合公式與 f(FRGB, BRGB) = |
D2D1_BLEND_MODE_DARKER_COLOR | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_LIGHTEN | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_SCREEN | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_COLOR_DODGE | 基本混合公式與 f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_DODGE | 基本混合公式與 f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LIGHTER_COLOR | 僅限 Alpha 的基本混合公式。 |
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,B RGB) = FRGB + BRGB 2 * F RGB * B RGB |
D2D1_BLEND_MODE_HUE | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_SATURATION | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_COLOR | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_LUMINOSITY | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_DISSOLVE | 給:
|
D2D1_BLEND_MODE_SUBTRACT | 僅限 Alpha 的基本混合公式。 |
D2D1_BLEND_MODE_DIVISION | 僅限 Alpha 的基本混合公式。 |
注意
針對所有 Blend 模式,輸出值會預先設定,並夾在範圍 [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 =
否則,有六個色調相依案例:
如果 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 的藍色/洋紅扇區中。
由於混合模式會從兩種不同的色彩中任意組合 HSL 元件,因此轉換的 RGB 值通常會超出範圍,也就是說,一或多個通道元件可能超出 [0.0, 1.0] 的法律範圍。 透過減少飽和度,同時保留色調和亮度,這些色彩會帶回光域:
輸出點陣圖
這個效果的輸出位圖一律是兩個輸入影像的聯集大小。
範例指令碼
如需此效果的範例,請下載 Direct2D 複合效果模式範例。
需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
最低支援的伺服器 | 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
頁首 | d2d1effects.h |
程式庫 | d2d1.lib、dxguid.lib |