Partilhar via


Efeito de mistura

Use o efeito de mistura 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

captura de tela de exemplo de efeito 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
Modo
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 mistura

A tabela aqui mostra todos os modos de mistura deste 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

Em que:

  • OPRGB é a cor de saída pré-multiplicada
  • OA é Output Alpha
  • BRGB é a cor de destino não pré-multiplicada
  • BA é o alfa de destino
  • FRGB é a cor de origem não pré-multiplicada
  • FA é 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 de matiz, saturação e 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 de escurecimento.
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 de mistura básicas com f(FRGB, BRGB) = Fórmula matemática para um efeito de queimadura linear.
D2D1_BLEND_MODE_DARKER_COLOR Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de cor escura.
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 desvio 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 de mistura básicas 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 de mistura básicas com f(FRGB, BRGB) = Fórmula matemática para um efeito hard mix.
D2D1_BLEND_MODE_DIFFERENCE Fórmulas de mistura básicas 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 * BRGB
D2D1_BLEND_MODE_HUE Fórmula de mistura básica apenas para alfa. Fórmula matemática para um efeito de mistura de tonalidades.
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 Dado:
  • Uma coordenada de cena XY para o pixel atual
  • Um gerador de números pseudoaleatório determinístico rand(XY) baseado na coordenada de sementes XY, com distribuição imparcial de valores de [0, 1]

Fórmula matemática para um efeito de mistura dissolvida.
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 mistura, 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

Conversão de RGB para HSL

fórmula matemática que descreve a transformação de cor RGB para cor HSL.

Isto coloca S e L no intervalo [0,0, 1,0] e H no intervalo [-1,0, 5,0].

Conversão de HSL para RGB

Para converter o contrário, usamos o inverso dos cálculos anteriores.

Se S = 0, então R = G = B = L

Caso contrário, existem seis casos dependentes da tonalidade:

Se H for superior a 0, os valores encontram-se no sector vermelho/magenta em que 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 estã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 estão no setor amarelo/verde, onde G>R>B.

equaiton 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 em que 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.

equaiton matemático passo seis de seis convertendo 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]. Estas cores são trazidas de volta à gama reduzindo minimamente a saturação, preservando tanto a tonalidade como a luminosidade:

fórmula matemática que descreve 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.

Requerimentos

Exigência Valor
Cliente mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Servidor mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect