Partilhar via


Efeito composto aritmético

Use o efeito composto aritmético para combinar 2 imagens usando uma soma ponderada de pixels das imagens de entrada.

O CLSID para este efeito é CLSID_D2D1ArithmeticComposite.

Fórmula

A fórmula aqui é usada para calcular esse efeito.

Saídargba = C1 * Origemrgba * Destinorgba + C2 * Origemrgba + C3 * Destinorgba + C4

Onde C1, C2, C3, C4 são coeficientes que você definiu.

Os coeficientes são mapeados para os valores em um D2D1_VETOR_4F (x, y, z, w):

  • x = C1
  • y = C2
  • z = C3
  • w = C4

Imagem de exemplo

Um exemplo simples é adicionar os pixels de origem e destino. No exemplo, 2 retângulos arredondados são compostos juntos. O retângulo de origem é azul e o destino é vermelho.

A imagem aqui é a saída do efeito composto aritmético com os coeficientes da equação definidos para os valores aqui.

  • C1 = 0
  • C2 = 1
  • C3 = 1
  • C4 = 0

uma imagem de exemplo mostrando 2 retângulos arredondados do mesmo tamanho que se sobrepõem usando o efeito composto aritmético.

O resultado é que os valores de pixel para a origem e o destino são adicionados. As regiões onde os retângulos não se sobrepõem aos valores RGBA são todas 0. Onde os retângulos se sobrepõem a cor é magenta porque os valores R e B estão ambos no máximo.

Aqui está outro exemplo de imagem com código.

Antes da imagem 1
a primeira imagem de origem antes do efeito.
Antes da imagem 2
a segunda imagem antes do efeito.
Após
a imagem após a transformação.
ComPtr<ID2D1Effect> arithmeticCompositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ArithmeticComposite, &arithmeticCompositeEffect);

arithmeticCompositeEffect->SetInput(0, bitmap);
arithmeticCompositeEffect->SetInput(1, bitmapTwo);
arithmeticCompositeEffect->SetValue(D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS, D2D1::Vector4F(0.0f, 0.5f, 0.5f, 0.0f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(arithmeticCompositeEffect.Get());
m_d2dContext->EndDraw();

Propriedades do efeito

Nome para exibição e enumeração de índice Descrição
Coeficientes
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Os coeficientes para a equação usados para compor as duas imagens de entrada. Os coeficientes são unitários e ilimitados. Type é D2D1_VETOR_4F.
O valor padrão é {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
O efeito fixa os valores de cor entre 0 e 1 antes que o efeito passe os valores para o próximo efeito no gráfico.
Se você definir isso como TRUE, o efeito apertará os valores. Se você definir isso como FALSE, o efeito não fixará os valores de cor, mas outros efeitos e a superfície de saída poderão apertar os valores se eles não forem de precisão suficiente.
O tipo é BOOL.
O valor padrão é FALSE.

Bitmap de saída

O bitmap de saída depende dos valores de coeficiente. Estes são os tamanhos de bitmap de saída possíveis.

  • Se C1 é o único coeficiente diferente de zero, o tamanho da saída é a intersecção dos retângulos de entrada.
  • Se C2 for o único coeficiente diferente de zero, o tamanho da saída será o tamanho do retângulo de origem.
  • Se C3 for o único coeficiente diferente de zero, o tamanho da saída será o tamanho do retângulo de destino.
  • Se todos os coeficientes forem zero, o tamanho da saída é um retângulo vazio.
  • Para todos os outros valores de coeficientes, o tamanho da saída é a união dos retângulos de entrada.

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