Compartir a través de


Efecto compuesto aritmético

Use el efecto compuesto aritmético para combinar 2 imágenes mediante una suma ponderada de píxeles de las imágenes de entrada.

El CLSID de este efecto es CLSID_D2D1ArithmeticComposite.

Fórmula

La fórmula aquí se usa para calcular este efecto.

Outputrgba = C1 * Sourcergba * Destinationrgba + C2 * Sourcergba + C3 * Destinationrgba + C4

Donde C1, C2, C3, C4 son coeficientes que se establecen.

Los coeficientes se asignan a los valores de un D2D1_VECTOR_4F (x, y, z, w):

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

Imagen de ejemplo

Un ejemplo sencillo es agregar los píxeles de origen y destino. En el ejemplo, dos rectángulos redondeados se componen juntos. El rectángulo de origen es azul y el destino es rojo.

La imagen aquí es la salida del efecto compuesto aritmético con los coeficientes de la ecuación establecida en los valores aquí.

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

una imagen de ejemplo que muestra dos rectángulos redondeados del mismo tamaño que se superponen mediante el efecto compuesto aritmético.

El resultado es que se agregan los valores de píxeles para el origen y el destino. Las regiones en las que los rectángulos no se superponen a los valores RGBA son 0. Donde los rectángulos se superponen al color es magenta porque los valores de R y B están en el máximo.

Esta es otra imagen de ejemplo con código.

Antes de la imagen 1
la primera imagen de origen antes del efecto.
Antes de la imagen 2
la segunda imagen antes del efecto.
Después
la imagen después de la transformación.
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();

Propiedades de efecto

Enumeración de nombre para mostrar e índice Descripción
Coeficientes
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Coeficientes de la ecuación usada para componer las dos imágenes de entrada. Los coeficientes son a menos que y no estén enlazados. El tipo es D2D1_VECTOR_4F.
El valor predeterminado es {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
El efecto sujeta los valores de color a entre 0 y 1 antes de que el efecto pase los valores al siguiente efecto del gráfico.
Si establece esto en TRUE, el efecto restringirá los valores. Si establece esto en FALSE, el efecto no sujetará los valores de color, pero otros efectos y la superficie de salida pueden sujetar los valores si no tienen una precisión lo suficientemente alta.
El tipo es BOOL.
El valor predeterminado es FALSE.

Mapa de bits de salida

El mapa de bits de salida depende de los valores de coeficiente. Estos son los posibles tamaños de mapa de bits de salida.

  • Si C1 es el único coeficiente distinto de cero, el tamaño de salida es la intersección de los rectángulos de entrada.
  • Si C2 es el único coeficiente distinto de cero, el tamaño de salida es el tamaño del rectángulo de origen.
  • Si C3 es el único coeficiente distinto de cero, el tamaño de salida es el tamaño del rectángulo de destino.
  • Si todos los coeficientes son cero, el tamaño de salida es un rectángulo vacío.
  • Para todos los demás valores de coeficiente, el tamaño de salida es la unión de los rectángulos de entrada.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 y actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Servidor mínimo compatible Windows 8 y actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Encabezado d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect