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
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 |
---|
![]() |
Antes da imagem 2 |
![]() |
Após |
![]() |
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 |