算術複合效果
使用算術複合效果,使用輸入影像的加權圖元總和來結合 2 個影像。
這個效果的 CLSID 是CLSID_D2D1ArithmeticComposite。
公式
這裡的公式是用來計算此效果。
輸出rgba = C1 * sourcergba * Destinationrgba + C2 * Sourcergba + C3 * Destinationrgba + C4
其中 C1、C2、C3、C4 是您設定的係數。
係數會對應至D2D1_VECTOR_4F中的值(x、y、z、w):
- x = C1
- y = C2
- z = C3
- w = C4
範例影像
簡單的範例是新增來源和目的地圖元。 在此範例中,2 個圓角矩形會結合在一起。 來源矩形為藍色,目的地為紅色。
此處的影像是算術複合效果的輸出,且方程式係數設定為此處的值。
- C1 = 0
- C2 = 1
- C3 = 1
- C4 = 0
結果是會新增來源和目的地的圖元值。 矩形沒有重疊 RGBA 值的區域全都是 0。 其中矩形重疊的色彩是洋紅,因為 R 和 B 值都是最大值。
以下是另一個包含程式代碼的範例影像。
影像 1 之前 |
---|
![]() |
影像 2 之前 |
![]() |
後 |
在轉換之後 ![]() |
ComPtr<ID2D1Effect> arithmeticCompositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ArithmeticComposite, &arithmeticCompositeEffect);
arithmeticCompositeEffect->SetInput(0, bitmap);
arithmeticCompositeEffect->SetInput(1, bitmapTwo);
arithmeticCompositeEffect->SetValue(D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS, D2D1::Vector4F(0.0f, 0.5f, 0.5f, 0.0f));
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(arithmeticCompositeEffect.Get());
m_d2dContext->EndDraw();
效果屬性
顯示名稱和索引列舉 | 描述 |
---|---|
係數 D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS |
用於複合兩個輸入影像之方程式的係數。 係數是無單位和未系結的。 類型為 D2D1_VECTOR_4F。 默認值為 {1.0f、0.0f、0.0f、0.0f}。 |
ClampOutput D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT |
效果會將色彩值限制在 0 到 1 之間,效果才會將值傳遞至圖形中的下一個效果。 如果您將此值設定為TRUE,效果將會限制值。 如果您將此值設定為 FALSE,效果將不會夾住色彩值,但如果這些值不夠精確,其他效果和輸出表面可能會夾住值。 類型為 BOOL。 預設值為 FALSE。 |
輸出點陣圖
輸出點圖取決於係數值。 這些是可能的輸出點陣圖大小。
- 如果 C1 是唯一的非零係數,則輸出大小是輸入矩形的交集。
- 如果 C2 是唯一的非零係數,則輸出大小是 Source 矩形的大小。
- 如果 C3 是唯一的非零係數,則輸出大小會是 Destination 矩形的大小。
- 如果所有係數都是零,則輸出大小為空矩形。
- 對於所有其他係數值,輸出大小是輸入矩形的聯集。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
最低支援的伺服器 | 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
頁眉 | d2d1effects.h |
圖書館 | d2d1.lib、dxguid.lib |