算术复合效果
使用算术复合效果,使用输入图像中像素的加权和组合 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
结果是添加了源和目标的像素值。 矩形不与 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 |