亮度效果

使用亮度效果控制图像的亮度。

此效果的 CLSID CLSID_D2D1Brightness。

示例图

以前
效果前的图像。
之后
转换后的图像。
ComPtr<ID2D1Effect> brightnessEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Brightness, &brightnessEffect);

brightnessEffect->SetValue(D2D1_BRIGHTNESS_PROP_BLACK_POINT, D2D1::Vector2F(0.0f, 0.2f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(brightnessEffect.Get());
m_d2dContext->EndDraw();

效果属性

属性显示名称 类型和默认值 说明
WhitePoint
D2D1_BRIGHTNESS_PROP_WHITE_POINT
D2D1_VECTOR_2F
{1.0f, 1.0f}
亮度传输曲线的上半部分。 白点调整图像较亮部分的外观。 此属性适用于 x 值和 y 值,按该顺序排列。 此属性的每个值都介于 0 和 1 之间(含)。
BlackPoint
D2D1_BRIGHTNESS_PROP_BLACK_POINT
D2D1_VECTOR_2F
{0.0f, 0.0f}
亮度传输曲线的下半部分。 黑点调整图像较深部分的外观。 此属性适用于 x 值和 y 值,按该顺序排列。 此属性的每个值都介于 0 和 1 之间(含)。

此效果使用指定的白色和黑色点生成用于调整位图的传输函数。 下一个公式描述传输函数。 输入强度在 0 和 1 之间定义。

亮度算法

效果算法实现创建传输函数的公式。 我们使用此函数来调整图像像素。 黑点和白点的 x 和 y 值是连接形成转换的两维坐标。 最终输出公式的每个部分:

  1. 使用此公式:helper 函数 1 将图像数据从线性空间转换为非线性空间

  2. 根据以下值调整图像:

    • input 是 0 到 1 的输入图像像素强度值。

    • *白色 Pt. (x、y) *转换曲线的位置,以获取更亮的像素强度。

    • 黑色 Pt。 (x、y) 是变暗器像素强度的转换曲线的位置。

  3. 使用以下公式将图像数据转换回线性空间: helper 函数 2

此处显示了最终输出公式和分量部分。

亮度调整的完整计算

输出位图

输出位图大小与输入位图大小相同。

要求

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

ID2D1Effect