Efecto combinación

Use el efecto de combinación para combinar 2 imágenes. Este efecto tiene 26 modos de combinación.

El CLSID de este efecto es CLSID_D2D1Blend.

Ejemplos de combinación

Esta es una imagen de ejemplo de cada modo de combinación del efecto de combinación. Una lista completa de los modos de combinación y las propiedades de modo correspondientes se encuentran en la sección siguiente.

captura de pantalla de ejemplo de efecto de todos los modos de combinación disponibles.

Este es otro ejemplo mediante el modo de exclusión.

Antes de la imagen 1
La primera imagen 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> blendEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Blend, &blendEffect);

blendEffect->SetInput(0, bitmap);
blendEffect->SetInput(1, bitmapTwo);
blendEffect->SetValue(D2D1_BLEND_PROP_MODE, D2D1_BLEND_MODE_EXCLUSION);

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

Propiedades del efecto

Nombre para mostrar y enumeración del índice Descripción
Modo
D2D1_BLEND_PROP_MODE
Modo de combinación utilizado para el efecto. Vea Modos de combinación para obtener más información. El tipo es D2D1_BLEND_MODE.
El valor predeterminado es D2D1_BLEND_MODE_MULTIPLY.

Modos de combinación

En la tabla siguiente se muestran todos los modos de combinación de este efecto. Las funciones auxiliares necesarias para calcular la salida del efecto se encuentran en la sección siguiente.

Color: OPRGB = f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)

Alfa: OA = FA * (1 - BA) + BA

Donde:

  • OPRGB es el color de salida multiplicado previamente
  • OA es alfa de salida
  • BRGB es el color de destino no multiplicado previamente
  • BA es el alfa de destino
  • FRGB es el color de origen no multiplicado previamente
  • FA es el alfa de origen
  • f(SRGB, DRGB) es una función de combinación que varía según el modo de combinación.

Algunos de los modos de combinación requieren conversión hacia y desde el tono, saturación, luminosidad (HSL) espacio de color a RGB.

Enumeración Ecuación
D2D1_BLEND_MODE_DARKEN Fórmula básica de combinación solo para alfa. fórmula matemática para un efecto oscuro.
D2D1_BLEND_MODE_MULTIPLY Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de multiplicación.
D2D1_BLEND_MODE_COLOR_BURN Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de quemadura de color.
D2D1_BLEND_MODE_LINEAR_BURN Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de quemadura lineal.
D2D1_BLEND_MODE_DARKER_COLOR Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de color oscuro.
D2D1_BLEND_MODE_LIGHTEN Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto ligero.
D2D1_BLEND_MODE_SCREEN Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de pantalla.
D2D1_BLEND_MODE_COLOR_DODGE Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de sobreexposición de color.
D2D1_BLEND_MODE_LINEAR_DODGE Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de sobreexposición lineal.
D2D1_BLEND_MODE_LIGHTER_COLOR Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de color más claro.
D2D1_BLEND_MODE_OVERLAY Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de superposición.
D2D1_BLEND_MODE_SOFT_LIGHT Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de luz suave.
D2D1_BLEND_MODE_HARD_LIGHT Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de luz dura.
D2D1_BLEND_MODE_VIVID_LIGHT Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto claro vívido.
D2D1_BLEND_MODE_LINEAR_LIGHT Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de luz lineal.
D2D1_BLEND_MODE_PIN_LIGHT Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de luz de anclaje.
D2D1_BLEND_MODE_HARD_MIX Fórmulas de combinación básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de mezcla dura.
D2D1_BLEND_MODE_DIFFERENCE Fórmulas de combinación básicas con f(FRGB, BRGB) = abs(FRGB - BRGB)
D2D1_BLEND_MODE_EXCLUSION Fórmulas de combinación básicas con f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB
D2D1_BLEND_MODE_HUE Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de combinación de matiz.
D2D1_BLEND_MODE_SATURATION Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de combinación de saturación.
D2D1_BLEND_MODE_COLOR Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de combinación de colores.
D2D1_BLEND_MODE_LUMINOSITY Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de combinación de luminosidad.
D2D1_BLEND_MODE_DISSOLVE Con estas premisas:
  • Coordenada de escena XY para el píxel actual
  • Generador de números pseudoaleatorios determinista rand(XY) basado en la coordenada de inicialización XY, con distribución no sesgada de valores de [0, 1]

Fórmula matemática para un efecto de combinación de disolución.
D2D1_BLEND_MODE_SUBTRACT Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de combinación resta.
D2D1_BLEND_MODE_DIVISION Fórmula básica de combinación solo para alfa. Fórmula matemática para un efecto de combinación de división.

Nota:

Para todos los modos de combinación, el valor de salida está premultipado y se fija en el intervalo [0, 1].

Conversiones de espacio de colores HSL

El componente de luminosidad se calcula mediante los pesos RGB aquí:

  • kR = 0,30
  • kG = 0,59
  • kB = 0,11

Conversión de RGB a HSL

fórmula matemática que describe la transformación de color rgb a color hsl.

Esto coloca S y L en el intervalo [0,0, 1,0] y H en el intervalo [-1.0, 5.0].

Conversión de HSL a RGB

Para hacer la conversión de otra manera usamos el inverso de los cálculos anteriores.

Si S = 0 then R = G = B = L

De lo contrario, hay seis casos dependientes del matiz:

Si H es mayor que 0, los valores se encuentran en el sector rojo/magenta donde R>B>G.

ecuación matemática paso uno de los seis que convierten el color hsl en rgb.

Si H es mayor o igual que 0 y menor que 1, los valores se encuentran en el sector rojo/amarillo donde R>G>B.

ecuación matemática paso dos de seis convirtiendo el color hsl en rgb.

Si H es mayor o igual que 1 y menor que 2, los valores se encuentran en el sector amarillo/verde donde G>R>B.

ecuación matemática paso tres de seis convirtiendo el color hsl en rgb.

Si H es mayor o igual que 2 y menor que 3, los valores se encuentran en el sector verde/cian donde G>B>R.

ecuación matemática paso cuatro de seis convirtiendo el color hsl en rgb.

Si H es mayor o igual que 3 y menor que 4, los valores se encuentran en el sector cian/azul donde B>G>R.

ecuación matemática paso cinco de seis convirtiendo el color hsl en rgb.

Si H es mayor o igual que 4, los valores se encuentran en el sector azul/magenta donde B>R>G.

ecuación matemática paso seis de seis convirtiendo el color hsl en rgb.

Dado que los modos de combinación hacen combinaciones arbitrarias de componentes HSL de dos colores diferentes, es habitual que el valor RGB convertido sea fuera de gama, es decir, uno o varios componentes de canal pueden estar fuera del intervalo legal de [0.0, 1.0]. Estos colores se devuelven a la gama reduciendo mínimamente la saturación, al tiempo que conservan el tono y la luminosidad:

fórmula matemática que describe las correcciones necesarias para las instancias fuera de la gama.

Mapa de bits de salida

El mapa de bits de salida de este efecto es siempre el tamaño de la unión de las dos imágenes de entrada.

Código de ejemplo

Para obtener un ejemplo de este efecto, descargue el ejemplo de modos de efecto compuesto direct2D.

Requisitos

Requisito Valor
Cliente mínimo compatible 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