复合效果
使用复合效果合并 2 张或更多图像。 此效果具有 13 种不同的复合模式。 T
复合效果接受 2 个或多个输入。 指定 2 个图像时,destination 是第一个输入 (索引 0) ,源是第二个输入 (索引 1) 。 如果指定了 2 个以上的输入,则从第一个输入和第二个输入开始合成图像,依依此。
此效果使用图形处理单元的混合单元 (GPU) 实现所有模式。
此效果的 CLSID CLSID_D2D1Composite。
示例图
此处的图像显示了 2 个大小相同的重叠的圆角矩形。 蓝色矩形是源,红色矩形是目标。 图像是使用源过度模式合成的。
下面是使用默认模式的另一个示例。
图像 1 之前 |
---|
图像 2 之前 |
之后 |
ComPtr<ID2D1Effect> compositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Composite, &compositeEffect);
compositeEffect->SetInput(0, bitmap);
compositeEffect->SetInput(1, bitmapTwo);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(compositeEffect.Get());
m_d2dContext->EndDraw();
效果属性
显示名称和索引枚举 | 类型和默认值 | 说明 |
---|---|---|
“模式” D2D1_COMPOSITE_PROP_MODE |
D2D1_COMPOSITE_MODE D2D1_COMPOSITE_MODE_SOURCE_OVER |
用于效果的模式。 |
模式类型
此处的表显示了此效果的模式。 表中列出的公式使用以下元素:
- O = 输出
- S = 源
- SA = 源 Alpha
- D = 目标
- DA = Destination Alpha
枚举 | 方程 | 输出位图大小 |
---|---|---|
D2D1_COMPOSITE_MODE_SOURCE_OVER | O = S + (1 SA) * D | 源位图和目标位图的联合 |
D2D1_COMPOSITE_MODE_DESTINATION_OVER | O = (1 DA) * S + D | 源位图和目标位图的联合 |
D2D1_COMPOSITE_MODE_SOURCE_IN | O = DA * S | 源位图和目标位图的交集 |
D2D1_COMPOSITE_MODE_DESTINATION_IN | O = SA * D | 源位图和目标位图的交集 |
D2D1_COMPOSITE_MODE_SOURCE_OUT | O = (1 - DA) * S | 源位图的区域 |
D2D1_COMPOSITE_MODE_DESTINATION_OUT | O = (1 - SA) * D | 目标位图的区域 |
D2D1_COMPOSITE_MODE_SOURCE_ATOP | O = DA * S + (1 - SA) * D | 目标位图的区域 |
D2D1_COMPOSITE_MODE_DESTINATION_ATOP | O = (1 - DA) * S + SA * D | 源位图的区域 |
D2D1_COMPOSITE_MODE_XOR | O = (1 - DA) * S + (1 - SA) * D | 源位图和目标位图的联合 |
D2D1_COMPOSITE_MODE_PLUS | O = S + D | 源位图和目标位图的联合 |
D2D1_COMPOSITE_MODE_SOURCE_COPY | O = S | 源位图的区域 |
D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY | O = S (仅存在源) | 源位图和目标位图的并集。 如果源不存在,则不会覆盖目标。 |
D2D1_COMPOSITE_MODE_MASK_INVERT | O = (1 D) * S + (1 SA) * D | 源位图和目标位图的并集。alpha 值保持不变。 |
下图显示了图像不透明度为 1.0 或 0.5 的每个模式的示例。
代码示例
有关此效果的示例,请下载 Direct2D 复合效果模式示例。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用] |
最低受支持的服务器 | 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用] |
标头 | d2d1effects.h |
库 | d2d1.lib、dxguid.lib |