影の効果
影効果を使用して、イメージのアルファ チャネルから影を生成します。 高いアルファ値の場合は影が不透明になり、アルファ値が小さい場合は透明になります。 ぼかしの量と影の色を設定できます。
この効果の 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();
Effect プロパティ
表示名とインデックス列挙 | 形容 |
---|---|
BlurStandardDeviation D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION |
画像のアルファ チャネルに適用されるぼかしの量。 標準偏差に 3 を乗算することで、カーネルのぼかし半径を計算できます。 標準偏差とぼかし半径の両方の単位は DIP です。 このプロパティは、ガウス ブラー 標準偏差プロパティと同じです。 型は FLOAT です。 既定値は 3.0f です。 |
色 D2D1_SHADOW_PROP_COLOR |
ドロップ シャドウの色。 このプロパティは、次のように定義されたD2D1_VECTOR_4Fです (R、G、B、A)。 この色は、直線アルファで指定する必要があります。 型は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 |