Compartir a través de


Efecto blend

Use el efecto de mezcla para combinar 2 imágenes. Este efecto tiene 26 modos de mezcla.

El CLSID de este efecto es CLSID_D2D1Blend.

Ejemplos de combinación

Esta es una imagen de ejemplo de cada modo de mezcla del efecto de mezcla. 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 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> 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 de efecto

Enumeración de índice y nombre para mostrar Descripción
Modo
D2D1_BLEND_PROP_MODE
Modo de mezcla utilizado para el efecto. Consulta modos blend para obtener más información. El tipo es D2D1_BLEND_MODE.
El valor predeterminado es D2D1_BLEND_MODE_MULTIPLY.

Modos de mezcla

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

Dónde:

  • OPRGB es el color de salida multiplicado previamente
  • OA es Output Alpha
  • 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 alfa de origen
  • f(SRGB, DRGB) es una función de mezcla que varía según el modo de mezcla

Algunos de los modos de mezcla 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 mezcla solo para alfa. fórmula matemática para un efecto oscuro.
D2D1_BLEND_MODE_MULTIPLY Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto de multiplicación.
D2D1_BLEND_MODE_COLOR_BURN Fórmulas de mezcla básicas con f(FRGB, BRGB) = fórmula matemática para un efecto de quemadura de coor.
D2D1_BLEND_MODE_LINEAR_BURN Fórmulas básicas de mezcla con f(FRGB, BRGB) = fórmula matemática para un efecto de quemadura lineal.
D2D1_BLEND_MODE_DARKER_COLOR Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto de color oscuro.
D2D1_BLEND_MODE_LIGHTEN Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto ligero.
D2D1_BLEND_MODE_SCREEN Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto de pantalla.
D2D1_BLEND_MODE_COLOR_DODGE Fórmulas de mezcla básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de esquiva de color.
D2D1_BLEND_MODE_LINEAR_DODGE Fórmulas de mezcla básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de esquiva lineal.
D2D1_BLEND_MODE_LIGHTER_COLOR Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto de color más claro.
D2D1_BLEND_MODE_OVERLAY Fórmulas de mezcla básicas con f(FRGB, BRGB) = fórmula matemática para un efecto de superposición.
D2D1_BLEND_MODE_SOFT_LIGHT Fórmulas de mezcla básicas con f(FRGB, BRGB) = fórmula matemática para un efecto de luz suave.
D2D1_BLEND_MODE_HARD_LIGHT Fórmulas de mezcla básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de luz dura.
D2D1_BLEND_MODE_VIVID_LIGHT Fórmulas básicas de mezcla con f(FRGB, BRGB) = fórmula matemática para un efecto claro vívido.
D2D1_BLEND_MODE_LINEAR_LIGHT Fórmulas de mezcla básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de luz lineal.
D2D1_BLEND_MODE_PIN_LIGHT Fórmulas de mezcla básicas con f(FRGB, BRGB) = fórmula matemática para un efecto de luz de pin.
D2D1_BLEND_MODE_HARD_MIX Fórmulas de mezcla básicas con f(FRGB, BRGB) = Fórmula matemática para un efecto de mezcla dura.
D2D1_BLEND_MODE_DIFFERENCE Fórmulas básicas de mezcla con f(FRGB, BRGB) = abs(FRGB - BRGB)
D2D1_BLEND_MODE_EXCLUSION Fórmulas de mezcla básicas con f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB
D2D1_BLEND_MODE_HUE Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto de combinación de matiz.
D2D1_BLEND_MODE_SATURATION Fórmula básica de mezcla 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 mezcla solo para alfa. fórmula matemática para un efecto de combinación de colores.
D2D1_BLEND_MODE_LUMINOSITY Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto de mezcla de luminosidad.
D2D1_BLEND_MODE_DISSOLVE Dado:
  • 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 fusión de disolución.
D2D1_BLEND_MODE_SUBTRACT Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto de mezcla resta.
D2D1_BLEND_MODE_DIVISION Fórmula básica de mezcla solo para alfa. fórmula matemática para un efecto de combinación de división.

Nota

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

Conversiones de espacio de color 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 convertir la otra manera usamos el inverso de los cálculos anteriores.

Si S = 0, 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.

paso matemático de equaiton 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.

paso matemático de equaiton dos de seis que convierten 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 o verde donde G>R>B.

paso matemático de equaiton tres de seis que convierten 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.

paso matemático de equaiton cuatro de seis que convierten 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.

paso matemático de equaiton cinco de seis que convierten 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.

paso matemático de equaiton seis de seis que convierten el color hsl en rgb.

Dado que los modos de mezcla 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 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