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.

  • de imagem de exemplo
  • propriedades do efeito
  • modos de otimização
  • de bitmap de saída
  • requisitos de
  • tópicos relacionados

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.
Depois
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 é a mesma que a propriedade Gaussian Blur de desvio padrão.
O tipo é FLOAT.
O valor padrão é 3.0f.
Cor
D2D1_SHADOW_PROP_COLOR
A cor da sombra suspensa. 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}.
Optimizaçã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 a 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 filtragem trilinear.

Bitmap de saída

O tamanho do bitmap de saída é o tamanho da saída desfoque. A quantidade que o 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 (DIPs (pixels independentes do dispositivo)*6*(DPI do usuário)/96

A saída aumenta igualmente em toda a direção, portanto, por exemplo, 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 de sombra.

Requisitos

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

ID2D1Effect