复合效果

使用复合效果合并 2 张或更多图像。 此效果具有 13 种不同的复合模式。 T

复合效果接受 2 个或多个输入。 指定 2 个图像时,destination 是第一个输入 (索引 0) ,源是第二个输入 (索引 1) 。 如果指定了 2 个以上的输入,则从第一个输入和第二个输入开始合成图像,依依此。

此效果使用图形处理单元的混合单元 (GPU) 实现所有模式。

此效果的 CLSID CLSID_D2D1Composite。

示例图

此处的图像显示了 2 个大小相同的重叠的圆角矩形。 蓝色矩形是源,红色矩形是目标。 图像是使用源过度模式合成的。

一个示例图像,其中显示了 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 的每个模式的示例。

不透明度设置为 1.0 或 0.5 的每个模式的示例图像。

代码示例

有关此效果的示例,请下载 Direct2D 复合效果模式示例

要求

要求
最低受支持的客户端 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用]
最低受支持的服务器 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用]
标头 d2d1effects.h
d2d1.lib、dxguid.lib

ID2D1Effect