Compartilhar 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 esse efeito é CLSID_D2D1ArithmeticComposite.

Fórmula

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

Saídargba = C1 *Source rgba * Destinationrgba + C2 * Sourcergba + C3 * Destinationrgba + C4

Onde C1, C2, C3, C4 são coeficientes definidos.

Os coeficientes são mapeados para os valores em um D2D1_VECTOR_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 de destino. No exemplo, dois 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 definida com os valores aqui.

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

uma imagem de exemplo mostrando dois 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 em que os retângulos não se sobrepõem aos valores RGBA são todas 0. Onde os retângulos se sobrepõem à cor é magenta porque os valores R e B estão no máximo.

Aqui está outra imagem de exemplo 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.
After (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 de efeito

Nome de exibição e enumeração de índice Descrição
Coeficientes
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Os coeficientes para a equação usada para compor as duas imagens de entrada. Os coeficientes são sem unidade e não associados. O tipo é D2D1_VECTOR_4F.
O valor padrão é {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
O efeito fixa valores de cor entre 0 e 1 antes que o efeito passe os valores para o próximo efeito no grafo.
Se você definir isso como TRUE, o efeito fixará 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 fixar os valores se eles não forem de precisão alta o suficiente.
O tipo é BOOL.
O valor padrão é FALSE.

Bitmap de saída

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

  • Se C1 for o único coeficiente diferente de zero, o tamanho da saída será a interseçã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 será um retângulo vazio.
  • Para todos os outros valores de coeficiente, o tamanho da saída é a união dos retângulos de entrada.

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