Udostępnij za pośrednictwem


Efekt cienia

Użyj efektu cienia, aby wygenerować cień z kanału alfa obrazu. Cień jest bardziej nieprzezroczysty dla wyższych wartości alfa i bardziej przezroczysty dla niższych wartości alfa. Można ustawić ilość rozmycia i koloru cienia.

Identyfikator CLSID dla tego efektu jest CLSID_D2D1Shadow.

Przykładowy obraz

W tym przykładzie pokazano dane wyjściowe efektu cienia przetłumaczone w dół i bezpośrednio z obrazem źródłowym złożonym na nim w oryginalnej lokalizacji. Efekt cienia generuje tylko cień.

Przed
obraz przed efektem.
Po
obraz po przekształceniu.
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();

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Opis
BlurStandardDeviation
D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION
Ilość rozmycia do kanału alfa obrazu. Promień rozmycia jądra można obliczyć, mnożąc odchylenie standardowe przez 3. Jednostki zarówno odchylenia standardowego, jak i promienia rozmycia to DIPs.
Ta właściwość jest taka sama jak właściwość Gaussian Blur właściwości odchylenia standardowego.
Typ to FLOAT.
Wartość domyślna to 3.0f.
Kolor
D2D1_SHADOW_PROP_COLOR
Kolor cienia kropli. Ta właściwość jest D2D1_VECTOR_4F zdefiniowana jako: (R, G, B, A). Należy określić ten kolor w prostej alfa.
Typ to D2D1_VECTOR_4F.
Wartość domyślna to {0.0f, 0.0f, 0.0f, 1.0f}.
Optymalizacja
D2D1_SHADOW_PROP_OPTIMIZATION
Poziom optymalizacji wydajności.
Typ to D2D1_SHADOW_OPTIMIZATION.
Wartość domyślna to D2D1_SHADOW_OPTIMIZATION_BALANCED.

Tryby optymalizacji

Nazwa Opis
D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED Stosuje optymalizacje wewnętrzne, takie jak wstępne skalowanie na stosunkowo małym promieniu. Używa filtrowania liniowego.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED Używa tych samych progów optymalizacji co tryb szybkości, ale używa filtrowania trójliniowego.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY Używa tylko optymalizacji wewnętrznych z dużym promieniem rozmycia, gdzie przybliżenia są mniej prawdopodobne, aby być widoczne. Używa filtrowania trójliniowego.

Mapa bitowa wyjściowa

Rozmiar wyjściowej mapy bitowej to rozmiar danych wyjściowych rozmycia. Wielkość wzrostu wyjściowej mapy bitowej względem oryginalnej mapy bitowej można obliczyć przy użyciu następującego równania:

Wzrost wyjściowej mapy bitowej (X i Y) = RozmycieStandardDeviation (piksele niezależne od urządzenia)*6*(DPI użytkownika)/96

Dane wyjściowe rosną równie w każdym kierunku, więc na przykład jeśli rozmiar wzrośnie o 10 pikseli w każdym kierunku, lewy górny róg mapy bitowej znajduje się w lokalizacji (-5, -5), a prawy dolny będzie na (105, 105), jak pokazano na poniższym diagramie.

diagram wzrostu rozmiaru danych wyjściowych efektu cienia.

Wymagania

Wymaganie Wartość
Minimalny obsługiwany klient Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Minimalny obsługiwany serwer Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Nagłówek d2d1effects.h
Biblioteka d2d1.lib, dxguid.lib

ID2D1Effect