混合效果

使用混合效果合并 2 个图像。 此效果具有 26 种混合模式。

此效果的 CLSID CLSID_D2D1Blend。

混合示例

下面是混合效果的每个混合模式的示例图像。 混合模式和相应模式属性的完整列表位于下一部分

effect example screenshot of all the available blend modes.

下面是使用排除模式的另一个示例。

图像 1 之前
the first source image before the effect.
图像 2 之前
the second image before the effect.
之后
the image after the transform.
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。

混合模式

此处的表显示了此效果的所有混合模式。 计算效果输出所需的帮助程序函数在下一部分中。

颜色:OPRGBf ( 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 (SRGBDRGB) 是一个混合函数,根据混合模式而异

某些混合模式需要转换到色调、饱和度、亮度 (HSL) 颜色空间到 RGB。

枚举 方程
D2D1_BLEND_MODE_DARKEN 仅限 alpha 的基本混合公式。 mathematical formula for a darken effect.
D2D1_BLEND_MODE_MULTIPLY 仅限 alpha 的基本混合公式。 Mathematical formula for a mutiply effect.
D2D1_BLEND_MODE_COLOR_BURN 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a coor burn effect.
D2D1_BLEND_MODE_LINEAR_BURN 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a linear burn effect.
D2D1_BLEND_MODE_DARKER_COLOR 仅限 alpha 的基本混合公式。 Mathematical formla for a darken color effect.
D2D1_BLEND_MODE_LIGHTEN 仅限 alpha 的基本混合公式。 Mathematical formula for a lighten effect.
D2D1_BLEND_MODE_SCREEN 仅限 alpha 的基本混合公式。 Mathematical formula for a screen effect.
D2D1_BLEND_MODE_COLOR_DODGE 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a color dodge effect.
D2D1_BLEND_MODE_LINEAR_DODGE 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a linear dodge effect.
D2D1_BLEND_MODE_LIGHTER_COLOR 仅限 alpha 的基本混合公式。 Mathematical formula for a lighter color effect.
D2D1_BLEND_MODE_OVERLAY 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for an overlay effect.
D2D1_BLEND_MODE_SOFT_LIGHT 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a soft light effect.
D2D1_BLEND_MODE_HARD_LIGHT 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a hard light effect.
D2D1_BLEND_MODE_VIVID_LIGHT 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a vivid light effect.
D2D1_BLEND_MODE_LINEAR_LIGHT 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a linear light effect.
D2D1_BLEND_MODE_PIN_LIGHT 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a pin light effect.
D2D1_BLEND_MODE_HARD_MIX 将基本混合公式与 f (FRGBBRGB) = Mathematical formula for a hard mix effect.
D2D1_BLEND_MODE_DIFFERENCE 将基本混合公式与 f (FRGBBRGB) = abs (FRGB - BRGB)
D2D1_BLEND_MODE_EXCLUSION 基本混合公式与 f (FRGB、BRGB) = FRGB + BRGB 2 *FRGB * BRGB
D2D1_BLEND_MODE_HUE 仅限 alpha 的基本混合公式。 Mathematical formula for a hue blend effect.
D2D1_BLEND_MODE_SATURATION 仅限 alpha 的基本混合公式。 Mathematical formula for a sturation blend effect.
D2D1_BLEND_MODE_COLOR 仅限 alpha 的基本混合公式。 Mathematical formula for a color blend effect.
D2D1_BLEND_MODE_LUMINOSITY 仅限 alpha 的基本混合公式。 Mathematical formula for a luminosity blend effect.
D2D1_BLEND_MODE_DISSOLVE 给:
  • 当前像素的场景坐标 XY
  • 基于种子坐标 XY 的确定性伪随机数生成器 (XY) 运行,值分布从 [0, 1] 无偏差

Mathematical formula for a dissolve blend effect.
D2D1_BLEND_MODE_SUBTRACT 仅限 alpha 的基本混合公式。 Mathematical formula for a subtract blend effect.
D2D1_BLEND_MODE_DIVISION 仅限 alpha 的基本混合公式。 Mathematical formula for a division blend effect.

注意

对于所有 Blend 模式,输出值是预乘的,并固定到范围 [0, 1]。

HSL 颜色空间转换

发光度组件是使用以下 RGB 权重计算的:

  • kR = 0.30
  • kG = 0.59
  • kB = 0.11

从 RGB 转换为 HSL

mathematical formula describing the transformation from rgb color to hsl color.

这会将 SL 置于范围 [0.0, 1.0] 和 H 范围内的 [-1.0, 5.0]。

从 HSL 转换为 RGB

若要转换另一种方法,请使用前面的计算的反函数。

如果 S = 0,则 RGBL = = =

否则,有六种色调依赖情况:

如果 H 大于 0,则值位于 RBG>> 所在的红色/洋红扇区。

mathematical equaiton step one of six converting hsl color to rgb.

如果 H 大于或等于 0 且小于 1,则值为 RGB>> 的红色/黄色扇区。

mathematical equaiton step two of six converting hsl color to rgb.

如果 H 大于或等于 1 且小于 2,则值为 GRB>> 的黄色/绿色扇区。

mathematical equaiton step three of six converting hsl color to rgb.

如果 H 大于或等于 2 且小于 3,则值为 GBR>> 的绿色/青色扇区。

mathematical equaiton step four of six converting hsl color to rgb.

如果 H 大于或等于 3 且小于 4,则值位于 BGR>> 所在的青蓝色扇区中。

mathematical equaiton step five of six converting hsl color to rgb.

如果 H 大于或等于 4,则值为 BRG>> 的蓝色/洋红扇区。

mathematical equaiton step six of six converting hsl color to rgb.

由于混合模式使 HSL 组件的任意组合采用两种不同颜色,因此转换后的 RGB 值通常不带域,也就是说,一个或多个通道组件可能超出 [0.0, 1.0] 的法律范围。 通过减少饱和度,同时保留色调和亮度,这些颜色会重新进入游戏:

mathematical formula describing the corrections required for out of gamut instances.

输出位图

此效果的输出位图始终是两个输入图像的并集的大小。

代码示例

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

要求

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

ID2D1Effect