阴影效果
使用阴影效果从图像的 alpha 通道生成阴影。 对于较高的 alpha 值,阴影更不透明,对于较低的 alpha 值更透明。 可以设置模糊量和阴影的颜色。
此效果的 CLSID CLSID_D2D1Shadow。
示例图像
此处的示例显示了阴影效果的输出,该输出在原始位置中向下和右侧组合了源图像。 阴影效果仅输出阴影。
以前 |
---|
在效果之前 ![]() |
后 |
转换后 ![]() |
ComPtr<ID2D1Effect> shadowEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Shadow, &shadowEffect);
shadowEffect->SetInput(0, bitmap);
// Shadow is composited on top of a white surface to show opacity.
ComPtr<ID2D1Effect> floodEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Flood, &floodEffect);
floodEffect->SetValue(D2D1_FLOOD_PROP_COLOR, D2D1::Vector4F(1.0f, 1.0f, 1.0f, 1.0f));
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);
affineTransformEffect->SetInputEffect(0, shadowEffect.Get());
D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F::Translation(20, 20));
affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);
ComPtr<ID2D1Effect> compositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Composite, &compositeEffect);
compositeEffect->SetInputEffect(0, floodEffect.Get());
compositeEffect->SetInputEffect(1, affineTransformEffect.Get());
compositeEffect->SetInput(2, bitmap);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(compositeEffect.Get());
m_d2dContext->EndDraw();
效果属性
显示名称和索引枚举 | 描述 |
---|---|
BlurStandardDeviation D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION |
要应用于图像 alpha 通道的模糊量。 可以通过将标准偏差乘以 3 来计算内核的模糊半径。 标准偏差和模糊半径的单位都是 DIP。 此属性与 高斯模糊 标准偏差属性相同。 类型为 FLOAT。 默认值为 3.0f。 |
颜色 D2D1_SHADOW_PROP_COLOR |
阴影的颜色。 此属性是定义为:(R、G、B、A)的D2D1_VECTOR_4F。 必须用直线 alpha 指定此颜色。 类型为D2D1_VECTOR_4F。 默认值为 {0.0f、0.0f、0.0f、1.0f}。 |
优化 D2D1_SHADOW_PROP_OPTIMIZATION |
性能优化级别。 类型为D2D1_SHADOW_OPTIMIZATION。 默认值为D2D1_SHADOW_OPTIMIZATION_BALANCED。 |
优化模式
名字 | 描述 |
---|---|
D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED | 应用内部优化,例如以相对较小的弧度预先缩放。 使用线性筛选。 |
D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED | 使用与速度模式相同的优化阈值,但使用三线性筛选。 |
D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY | 仅使用具有大模糊弧度的内部优化,其中近似值不太可能可见。 使用三线性筛选。 |
输出位图
输出位图的大小是模糊输出的大小。 可以使用以下公式计算输出位图相对于原始位图的增长量:
输出位图增长 (X 和 Y) = BlurStandardDeviation (与设备无关的像素(DIP)*6*(用户 DPI)/96
输出在所有方向上都同样增加,因此,例如,如果每个方向的大小增加 10 像素,位图的左上角位于 (-5, -5), 右下角将位于 (105, 105), 如下图所示。
要求
要求 | 价值 |
---|---|
支持的最低客户端 | 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用] |
支持的最低服务器 | 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用] |
页眉 | d2d1effects.h |
图书馆 | d2d1.lib、dxguid.lib |