Compartilhar via


Efeito de sombra

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

O CLSID para esse efeito é CLSID_D2D1Shadow.

Imagem de exemplo

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

Antes
a imagem antes do efeito.
After (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 de efeito

Nome de 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.
Essa propriedade é igual à propriedade de desvio padrão Gaussian Blur .
O tipo é FLOAT.
O valor padrão é 3,0f.
Cor
D2D1_SHADOW_PROP_COLOR
A cor da sombra. Essa propriedade é uma D2D1_VECTOR_4F definida como: (R, G, B, A). Você deve especificar essa cor em alfa reto.
O tipo é D2D1_VECTOR_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

Nome Descrição
D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED Aplica otimizações internas, como pré-dimensionamento em raios relativamente pequenos. Usa filtragem linear.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED Usa os mesmos limites de otimização que o modo De velocidade, mas usa filtragem trilinear.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY Usa apenas otimizações internas com raios de desfoque grandes, em que as aproximações são menos propensas a serem visíveis. Usa a filtragem trilinear.

Bitmap de saída

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

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

A saída aumenta igualmente em todas as direções, portanto, se o tamanho aumentar 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), conforme mostrado no diagrama aqui.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Servidor mínimo com suporte Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect