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
- Propriedades de efeito
- modos de mistura
- de 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 |
---|---|
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.
![]() |
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 de mistura básicas 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 de mistura básicas 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 de mistura básicas com f(FRGB, BRGB) = ![]() |
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.
![]() |
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 | Dado:
![]() |
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 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
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.
Se H for maior ou igual a 0 e menor que 1, os valores estão no setor vermelho/amarelo onde R>G>B.
Se H for maior ou igual a 1 e menor que 2, os valores estã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 em que 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]. Estas cores são trazidas de volta à gama reduzindo minimamente a saturação, preservando tanto a tonalidade como 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.
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 |