混合效果
使用混合效果合并 2 个图像。 此效果具有 26 种混合模式。
此效果的 CLSID CLSID_D2D1Blend。
混合示例
下面是混合效果的每个混合模式的示例图像。 混合模式和相应模式属性的完整列表位于下一部分
下面是使用排除模式的另一个示例。
图像 1 之前 |
---|
在效果之前 ![]() |
图像 2 之前 |
在效果之前 ![]() |
后 |
转换后 ![]() |
ComPtr<ID2D1Effect> blendEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Blend, &blendEffect);
blendEffect->SetInput(0, bitmap);
blendEffect->SetInput(1, bitmapTwo);
blendEffect->SetValue(D2D1_BLEND_PROP_MODE, D2D1_BLEND_MODE_EXCLUSION);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(blendEffect.Get());
m_d2dContext->EndDraw();
效果属性
显示名称和索引枚举 | 描述 |
---|---|
模式 D2D1_BLEND_PROP_MODE |
用于效果的混合模式。 有关详细信息,请参阅 Blend 模式。 类型为D2D1_BLEND_MODE。 默认值为D2D1_BLEND_MODE_MULTIPLY。 |
混合模式
此处的表显示了此效果的所有混合模式。 计算效果输出所需的帮助程序函数位于下一部分。
颜色:OPRGB = f(FRGB、BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)
Alpha:OA = FA * (1 - BA) + BA
哪里:
- OPRGB 是预乘输出颜色
- OA 为输出 Alpha
- BRGB 是未预乘的目标颜色
- BA 是目标 alpha
- FRGB 是未预乘的源颜色
- FA 是源 alpha
- f(SRGB,DRGB)是一种混合函数,根据混合模式变化
某些混合模式需要转换到色调、饱和度、亮度(HSL)颜色空间到 RGB。
列举 | 方程 |
---|---|
D2D1_BLEND_MODE_DARKEN | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_MULTIPLY | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_COLOR_BURN | 基本混合公式与 f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_BURN | 基本混合公式与 f(FRGB,BRGB) = ![]() |
D2D1_BLEND_MODE_DARKER_COLOR | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_LIGHTEN | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_SCREEN | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_COLOR_DODGE | 基本混合公式与 f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_DODGE | 基本混合公式与 f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LIGHTER_COLOR | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_OVERLAY | 基本混合公式与 f(FRGB,BRGB) = ![]() |
D2D1_BLEND_MODE_SOFT_LIGHT | 基本混合公式与 f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_LIGHT | 基本混合公式与 f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_VIVID_LIGHT | 基本混合公式与 f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_LIGHT | 基本混合公式与 f(FRGB, BRGB) = 线性光效果的 ![]() |
D2D1_BLEND_MODE_PIN_LIGHT | 基本混合公式与 f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_MIX | 基本混合公式与 f(FRGB,BRGB) = ![]() |
D2D1_BLEND_MODE_DIFFERENCE | 基本混合公式与 f(FRGB, BRGB) = abs(FRGB - BRGB) |
D2D1_BLEND_MODE_EXCLUSION | 基本混合公式与 f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB |
D2D1_BLEND_MODE_HUE | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_SATURATION | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_COLOR | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_LUMINOSITY | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_DISSOLVE | 鉴于:
![]() |
D2D1_BLEND_MODE_SUBTRACT | 仅限 alpha 的基本混合公式。
![]() |
D2D1_BLEND_MODE_DIVISION | 仅限 alpha 的基本混合公式。
![]() |
注意
对于所有 Blend 模式,输出值是预乘的,并固定到范围 [0, 1]。
HSL 颜色空间转换
发光度组件使用以下 RGB 权重计算:
- kR = 0.30
- kG = 0.59
- kB = 0.11
从 RGB 转换为 HSL
这将 S 和 L 置于 [-1.0, 1.0] 范围和 H 范围内 [-1.0, 5.0]。
从 HSL 转换为 RGB
若要以另一种方式转换,请使用前面计算的反函数。
如果 S = 0,R = G = B = L
否则,有六种色调依赖情况:
如果 H 大于 0,则值位于红色/洋红色扇区中,其中 R>B>G。
如果 H 大于或等于 0 且小于 1,则值位于红色/黄色扇区中,其中 R>G>B。
如果 H 大于或等于 1 且小于 2,则值为黄色/绿色扇区,其中 G>R>B。
如果 H 大于或等于 2 且小于 3,则值位于绿色/青绿色扇区中,其中 G>B>R。
如果 H 大于或等于 3 且小于 4,则值位于蓝绿色/蓝色扇区中,B>G>R。
如果 H 大于或等于 4,则值位于蓝色/洋红色扇区中,B>R>G。
由于混合模式将 HSL 组件的任意组合从两种不同颜色组成,因此转换后的 RGB 值通常不相称,即一个或多个通道组件可能超出 [0.0, 1.0] 的法律范围。 这些颜色通过将饱和度降到最低,同时保持色调和亮度,从而重新进入游戏状态:
输出位图
此效果的输出位图始终是两个输入图像的并集的大小。
示例代码
有关此效果的示例,请下载 Direct2D 复合效果模式示例。
要求
要求 | 价值 |
---|---|
支持的最低客户端 | 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用] |
支持的最低服务器 | 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用] |
页眉 | d2d1effects.h |
图书馆 | d2d1.lib、dxguid.lib |