共用方式為


混合效果

使用混合效果來結合 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 鑒於:
  • 目前像素的場景座標 XY
  • 以種子座標 XY 為基礎的具決定性虛擬隨機數產生器 rand(XY),從 [0, 1] 中不偏不偏分佈的值

溶解混合效果的數學公式。
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

數學公式,描述從 rgb 色彩到 hsl 色彩的轉換。

這會在範圍 [-1.0, 5.0] 範圍中放置 SL,並將 H 放在 [-1.0, 5.0]。

從 HSL 轉換為 RGB

若要以另一種方式來轉換,我們會使用先前計算的反函數。

如果 S = 0,R = G = B = L

否則,有六個色調相依案例:

如果 H 大於 0,則值位於紅色/洋紅色扇區,其中 R>B>G

數學等號步驟之一,將 hsl 色彩轉換成 rgb。

如果 H 大於或等於 0 且小於 1,則值位於紅色/黃色扇區,其中 R>G>B

六個將 hsl 色彩轉換成 rgb 的數學等號步驟二。

如果 H 大於或等於 1 且小於 2,則值位於黃色/綠色扇區,其中 G>R>B

六個將 hsl 色彩轉換成 rgb 的數學等號步驟三。

如果 H 大於或等於 2 且小於 3,則值位於綠色/青色扇區,其中 G>B>R

數學等號步驟四,將 hsl 色彩轉換成 rgb。

如果 H 大於或等於 3 且小於 4,則值會位於 B>G>R的青色/藍色扇區中。

六個將 hsl 色彩轉換成 rgb 的數學等號步驟 5。

如果 H 大於或等於 4,則值位於藍色/洋紅色扇區,其中 B>R>G

六個將 hsl 色彩轉換成 rgb 的數學等號步驟六。

由於混合模式會從兩種不同的色彩中任意組合 HSL 元件,因此轉換的 RGB 值通常會超出範圍,也就是說,一或多個通道元件可能超出 [0.0, 1.0] 的法律範圍。 透過減少飽和度,同時保留色調和亮度,這些色彩會帶回光域:

數學公式,描述在遊戲外實例所需的更正。

輸出點陣圖

這個效果的輸出位圖一律是兩個輸入影像的聯集大小。

範例程序代碼

如需此效果的範例,請下載 Direct2D 複合效果模式範例

要求

要求 價值
最低支援的用戶端 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式]
最低支援的伺服器 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式]
頁眉 d2d1effects.h
圖書館 d2d1.lib、dxguid.lib

ID2D1Effect