亮度效果

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

此效果的 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 值,顺序为 y 值。 此属性的每个值都介于 0 和 1 之间(含)。
BlackPoint
D2D1_BRIGHTNESS_PROP_BLACK_POINT
D2D1_VECTOR_2F
{0.0f,0.0f}
亮度传输曲线的下半部分。 黑点调整图像较深部分的外观。 此属性用于 x 值和 y 值,顺序为 y 值。 此属性的每个值都介于 0 和 1 之间(含)。

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

亮度算法

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

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

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

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

    • *白色 Pt。 (x, y)*转换曲线的位置,用于更亮的像素强度。

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

  3. 使用此公式将图像数据转换回线性空间:帮助程序函数 2

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

亮度调整 的完整计算

输出位图

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

要求

要求 价值
支持的最低客户端 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
支持的最低服务器 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
页眉 d2d1effects.h
图书馆 d2d1.lib、dxguid.lib

ID2D1Effect