陰影效果
使用陰影效果從影像的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。 此屬性與 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}。 |
優化 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, 105),如下圖所示。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
最低支援的伺服器 | 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
頁眉 | d2d1effects.h |
圖書館 | d2d1.lib、dxguid.lib |