Partilhar via


Efeito de sombra

Use o efeito de sombra para gerar uma sombra a partir do canal alfa de uma imagem. A sombra é mais opaca para valores alfa mais elevados e mais transparente para valores alfa mais baixos. Você pode definir a quantidade de desfoque e a cor da sombra.

O CLSID para este efeito é CLSID_D2D1Shadow.

Imagem de exemplo

O exemplo aqui mostra a saída do efeito de sombra traduzido para baixo e para a direita com a imagem de origem composta sobre ela no local original. O efeito de sombra apenas produz a sombra.

Antes
a imagem antes do efeito.
Após
a imagem após a transformação.
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();

Propriedades do efeito

Nome para exibição e enumeração de índice Descrição
BlurStandardDeviation
D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION
A quantidade de desfoque a ser aplicada ao canal alfa da imagem. Você pode calcular o raio de desfoque do kernel multiplicando o desvio padrão por 3. As unidades do desvio padrão e do raio de desfoque são DIPs.
Esta propriedade é a mesma que a propriedade Gaussian Blur desvio padrão.
O tipo é FLOAT.
O valor padrão é 3.0f.
Cor
D2D1_SHADOW_PROP_COLOR
A cor da sombra. Esta propriedade é um D2D1_VETOR_4F definido como: (R, G, B, A). Você deve especificar essa cor em alfa reto.
O tipo é D2D1_VETOR_4F.
O valor padrão é {0.0f, 0.0f, 0.0f, 1.0f}.
Otimização
D2D1_SHADOW_PROP_OPTIMIZATION
O nível de otimização de desempenho.
O tipo é D2D1_SHADOW_OPTIMIZATION.
O valor padrão é D2D1_SHADOW_OPTIMIZATION_BALANCED.

Modos de otimização

Designação Descrição
D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED Aplica otimizações internas, como pré-dimensionamento em raios relativamente pequenos. Utiliza filtragem linear.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED Usa os mesmos limites de otimização do modo Velocidade, mas usa filtragem trilinear.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY Usa apenas otimizações internas com grandes raios de desfoque, onde as aproximações são menos prováveis de serem visíveis. Utiliza filtragem trilinear.

Bitmap de saída

O tamanho do bitmap de saída é o tamanho da saída de desfoque. A quantidade de crescimento do bitmap de saída em relação ao bitmap original pode ser calculada usando a seguinte equação:

Crescimento de bitmap de saída (X e Y) = BlurStandardDeviation (pixels independentes do dispositivo (DIPs))*6*(DPI do usuário)/96

A saída aumenta igualmente em todas as direções, por exemplo, se o tamanho aumenta em 10 pixels em cada direção, o canto superior esquerdo do bitmap está localizado em (-5, -5) e o canto inferior direito estará em (105, 105), como mostrado no diagrama aqui.

diagrama de crescimento do tamanho da saída do efeito de sombra.

Requerimentos

Exigência Valor
Cliente mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Servidor mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect