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.

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

Donde C1, C2, C3, C4 son coeficientes establecidos.

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, 2 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 2 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 superponen el 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 índice y nombre para mostrar Descripción
Coeficientes
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Coeficientes de la ecuación usada para componer las dos imágenes de entrada. Los coeficientes son unitarios y sin enlazar. 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 fijará los valores. Si se establece en FALSE, el efecto no sujetará los valores de color, pero otros efectos y la superficie de salida pueden sujetar los valores si no son de precisión suficiente.
El tipo es BOOL.
El valor predeterminado es FALSE.

Mapa de bits de salida

El mapa de bits de salida depende de los valores del 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 Valor
Cliente mínimo admitido Windows 8 y Platform Update para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Servidor mínimo admitido Windows 8 y Platform Update para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Encabezado d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect