混合效果
使用混合效果來結合 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 |
用於效果的混合模式。 如需詳細資訊,請參閱 Blend 模式。 此類型為D2D1_BLEND_MODE。 預設值為 D2D1_BLEND_MODE_MULTIPLY。 |
混合模式
下表顯示此效果的所有混合模式。 計算效果輸出所需的協助程式函式在下一節中。
色彩:OPRGB = f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)
Alpha: OA = FA * (1 - BA) + BA
哪裡:
- OPRGB 是預乘的輸出色彩
- OA 為 Output 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, BRGB) = FRGB + BRGB 2 * FRGB * BRGB |
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
這會在範圍 [-1.0, 5.0] 範圍中放置 S 和 L,並將 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 |