陰影效果

使用陰影效果從影像的 Alpha 色板產生陰影。 陰影對於較高的 Alpha 值而言更為不透明,而較低 Alpha 值的陰影則更透明。 您可以設定模糊的數量和陰影的色彩。

此效果的 CLSID 會CLSID_D2D1Shadow。

範例影像

此處的範例顯示陰影效果的輸出會向下和向右轉譯,並將來源影像複合在原始位置。 陰影效果只會輸出陰影。

之前
效果之前的影像。
After
轉換之後的影像。
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();

效果屬性

顯示名稱和索引列舉 Description
BlurStandardDeviation
D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION
要套用至影像 Alpha 色板的模糊量。 您可以將標準差乘以 3,以計算核心的模糊半徑。 標準差和模糊半徑的單位都是 DIP。
此屬性與 Gaussian Blur 標準差屬性相同。
此類型為 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}。
Optimization
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 (裝置獨立圖元 (DIPs) ) *6* (使用者 DPI) /96

輸出會以相同方向增加,例如,如果大小在每個方向增加 10 圖元,點陣圖的左上角位於 (-5、-5) ,而右下角會位於 (105、105、105) ,如下圖所示。

陰影效果輸出大小成長圖表。

規格需求

需求
最低支援的用戶端 適用于 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式]
最低支援的伺服器 適用于 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式]
標頭 d2d1effects.h
程式庫 d2d1.lib、dxguid.lib

ID2D1Effect