复合效果

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

复合效果接受 2 个或多个输入。 指定 2 个图像时,目标为第一个输入(索引 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 = 目标 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