算术复合效果

使用算术复合效果,使用输入图像中的加权像素总和将 2 个图像组合在一起。

此效果的 CLSID CLSID_D2D1ArithmeticComposite。

公式

此处的公式用于计算此效果。

输出rgba = C1 * 源rgba * 目标rgba + C2 * 源rgba + C3 * 目标rgba + 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

一个示例图像,其中显示了使用算术复合效果重叠的相同大小的 2 个圆角矩形。

结果是添加源和目标的像素值。 矩形不重叠的区域 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 是唯一的非零系数,则输出大小为源矩形的大小。
  • 如果 C3 是唯一的非零系数,则输出大小为目标矩形的大小。
  • 如果所有系数均为零,则输出大小为空矩形。
  • 对于所有其他系数值,输出大小是输入矩形的并集。

要求

要求 价值
支持的最低客户端 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
支持的最低服务器 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
页眉 d2d1effects.h
图书馆 d2d1.lib、dxguid.lib

ID2D1Effect