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

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

Exemplo de efeito captura de tela de todos os modos de mesclagem disponíveis.

Aqui está outro exemplo usando o modo de exclusão.

Antes da imagem 1
a primeira imagem de origem antes do efeito.
Antes da imagem 2
a segunda imagem antes do efeito.
Após
a imagem após a transformação.
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. fórmula matemática para um efeito darken.
D2D1_BLEND_MODE_MULTIPLY Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito multiplicador.
D2D1_BLEND_MODE_COLOR_BURN Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de queimadura de coor.
D2D1_BLEND_MODE_LINEAR_BURN Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de queima linear.
D2D1_BLEND_MODE_DARKER_COLOR Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de cor escurecer.
D2D1_BLEND_MODE_LIGHTEN Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de clareamento.
D2D1_BLEND_MODE_SCREEN Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de tela.
D2D1_BLEND_MODE_COLOR_DODGE Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de esquiva de cor.
D2D1_BLEND_MODE_LINEAR_DODGE Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de esquiva linear.
D2D1_BLEND_MODE_LIGHTER_COLOR Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de cor mais claro.
D2D1_BLEND_MODE_OVERLAY Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de sobreposição.
D2D1_BLEND_MODE_SOFT_LIGHT Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de luz suave.
D2D1_BLEND_MODE_HARD_LIGHT Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de luz dura.
D2D1_BLEND_MODE_VIVID_LIGHT Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de luz vívida.
D2D1_BLEND_MODE_LINEAR_LIGHT Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de luz linear.
D2D1_BLEND_MODE_PIN_LIGHT Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de luz de pino.
D2D1_BLEND_MODE_HARD_MIX Fórmulas básicas de mistura com f(FRGB, BRGB) =Fórmula matemática para um efeito de mistura difícil.
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. Fórmula matemática para um efeito de mistura de matiz.
D2D1_BLEND_MODE_SATURATION Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de mistura de saturação.
D2D1_BLEND_MODE_COLOR Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de mistura de cores.
D2D1_BLEND_MODE_LUMINOSITY Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de mistura de luminosidade.
D2D1_BLEND_MODE_DISSOLVE Considerando:
  • Uma coordenada de cena XY para o pixel atual
  • Um gerador de números pseudoaleatórios determinístico rand(XY) baseado na coordenada XY da semente, com distribuição imparcial de valores de [0, 1]

Fórmula matemática para um efeito de mistura de dissolução.
D2D1_BLEND_MODE_SUBTRACT Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de mistura de subtração.
D2D1_BLEND_MODE_DIVISION Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de mistura de divisão.

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

Fórmula matemática descrevendo a transformação da cor RGB para a cor 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.

equaiton matemático passo um dos seis convertendo cor HSL para RGB.

Se H for maior ou igual a 0 e menor que 1, os valores estarão no setor vermelho/amarelo onde R>G>B.

equaiton matemático passo dois de seis convertendo cor HSL para RGB.

Se H for maior ou igual a 1 e menor que 2, os valores estarão no setor amarelo/verde onde G>R>B.

Equiquaiton matemático passo três de seis convertendo cor HSL para RGB.

Se H for maior ou igual a 2 e menor que 3, os valores estão no setor verde/ciano onde G>B>R.

equaiton matemático passo quatro de seis convertendo cor HSL para RGB.

Se H for maior ou igual a 3 e menor que 4, os valores estão no setor ciano/azul onde B>G>R.

equaiton matemático passo cinco de seis convertendo cor HSL para RGB.

Se H for maior ou igual a 4, os valores estão no setor azul/magenta onde B>R>G.

Equiquaiton matemático passo seis de seis convertendo a cor HSL para RGB.

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:

fórmula matemática descrevendo as correções necessárias para instâncias fora da gama.

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

ID2D1Efeito