Efeito de mistura
Use o efeito de mesclagem para combinar 2 imagens. Este efeito tem 26 modos de mistura.
O CLSID para este efeito é CLSID_D2D1Blend.
- Exemplos de mistura
- Propriedades do efeito
- Modos de mesclagem
- Conversões de espaço de cores HSL
- Bitmap de saída
- Código de exemplo
- Requisitos
- Tópicos relacionados
Exemplos de mistura
Aqui está uma imagem de exemplo de cada modo de mistura do efeito de mistura. Uma lista completa dos modos de mesclagem e as propriedades de modo correspondentes estão na próxima seção
Aqui está outro exemplo usando o modo de exclusão.
Antes da imagem 1 |
---|
Antes da imagem 2 |
Após |
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();
Propriedades do efeito
Nome para exibição e enumeração de índice | Descrição |
---|---|
Mode D2D1_BLEND_PROP_MODE |
O modo de mistura usado para o efeito. Consulte Modos de mesclagem para obter mais informações. O tipo é D2D1_BLEND_MODE. O valor padrão é D2D1_BLEND_MODE_MULTIPLY. |
Modos de mesclagem
A tabela aqui mostra todos os modos de mesclagem desse efeito. As funções auxiliares necessárias para calcular a saída do efeito estão na próxima seção.
Cor: OPRGB = f (FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)
Alfa: OA = FA * (1 - BA) + BA
Onde:
- OPRGB é a cor de saída pré-multiplicada
- OA é Saída Alpha
- BRGB é a cor de destino não pré-multiplicada
- BA é alfa de destino
- FRGB é a cor de origem não pré-multiplicada
- FA é a fonte alfa
- f(SRGB, DRGB) é uma função de mistura que varia por modo de mistura
Alguns dos modos de mistura requerem conversão de e para o espaço de cores matiz, saturação, luminosidade (HSL) para RGB.
Enumeração | Equação |
---|---|
D2D1_BLEND_MODE_DARKEN | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_MULTIPLY | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_COLOR_BURN | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_BURN | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_DARKER_COLOR | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_LIGHTEN | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_SCREEN | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_COLOR_DODGE | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_DODGE | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LIGHTER_COLOR | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_OVERLAY | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_SOFT_LIGHT | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_HARD_LIGHT | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_VIVID_LIGHT | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_LIGHT | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_PIN_LIGHT | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_HARD_MIX | Fórmulas básicas de mistura com f(FRGB, BRGB) = |
D2D1_BLEND_MODE_DIFFERENCE | Fórmulas básicas de mistura com f(FRGB, BRGB) = abs(FRGB - BRGB) |
D2D1_BLEND_MODE_EXCLUSION | Fórmulas básicas de mistura com f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * B RGB |
D2D1_BLEND_MODE_HUE | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_SATURATION | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_COLOR | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_LUMINOSITY | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_DISSOLVE | Considerando:
|
D2D1_BLEND_MODE_SUBTRACT | Fórmula de mistura básica apenas para alfa. |
D2D1_BLEND_MODE_DIVISION | Fórmula de mistura básica apenas para alfa. |
Observação
Para todos os modos de mesclagem, o valor de saída é pré-multiplicado e fixado ao intervalo [0, 1].
Conversões de espaço de cores HSL
O componente de luminosidade é calculado usando os pesos RGB aqui:
- kR = 0,30
- kG = 0,59
- kB = 0,11
Convertendo de RGB para HSL
Isso coloca S e L no intervalo [0,0, 1,0] e H no intervalo [-1,0, 5,0].
Convertendo de HSL para RGB
Para converter o outro caminho, usamos o inverso dos cálculos anteriores.
Se S = 0, então R = G = B = L
Caso contrário, há seis casos dependentes da tonalidade:
Se H for maior que 0, os valores estarão no setor vermelho/magenta onde R>B>G.
Se H for maior ou igual a 0 e menor que 1, os valores estarão no setor vermelho/amarelo onde R>G>B.
Se H for maior ou igual a 1 e menor que 2, os valores estarão no setor amarelo/verde onde G>R>B.
Se H for maior ou igual a 2 e menor que 3, os valores estão no setor verde/ciano onde G>B>R.
Se H for maior ou igual a 3 e menor que 4, os valores estão no setor ciano/azul onde B>G>R.
Se H for maior ou igual a 4, os valores estão no setor azul/magenta onde B>R>G.
Como os modos de mistura fazem combinações arbitrárias de componentes HSL de duas cores diferentes, é comum que o valor RGB convertido esteja fora da gama, ou seja, um ou mais componentes de canal podem estar fora do intervalo legal de [0.0, 1.0]. Essas cores são trazidas de volta à gama reduzindo minimamente a saturação, preservando a tonalidade e a luminosidade:
Bitmap de saída
O bitmap de saída para esse efeito é sempre o tamanho da união das duas imagens de entrada.
Código de exemplo
Para obter um exemplo desse efeito, baixe o exemplo de modos de efeito composto Direct2D.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 e Atualização de plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store] |
Servidor com suporte mínimo | Windows 8 e Atualização de plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store] |
Cabeçalho | d2d1effects.h |
Biblioteca | d2d1.lib, dxguid.lib |