Compartilhar via


Efeito de matriz convolve

Use o efeito de matriz convolve para aplicar um kernel 2D arbitrário a uma imagem. Você pode usar esse efeito para desfocar, detectar bordas, retardo ou afiar uma imagem.

O CLSID para esse efeito é CLSID_D2D1ConvolveMatrix.

  • de imagem de exemplo
  • propriedades do efeito
  • modos de escala
  • modos de borda
  • de bitmap de saída
  • requisitos de
  • tópicos relacionados

Imagem de exemplo

O exemplo aqui mostra a entrada e a saída do efeito de matriz convolve com um kernel 3 x 3.

Antes
a imagem antes do efeito.
Depois
a imagem após a transformação.
ComPtr<ID2D1Effect> convolveMatrixEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ConvolveMatrix, &convolveMatrixEffect);

convolveMatrixEffect->SetInput(0, bitmap);
float matrix[9] = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
convolveMatrixEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX, matrix);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(convolveMatrixEffect.Get());
m_d2dContext->EndDraw();

Propriedades de efeito

Nome de exibição e enumeração de índice Descrição
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
O tamanho de uma unidade no kernel. As unidades estão em (unidade DIPs/kernel), em que uma unidade de kernel é do tamanho do elemento no kernel de convolução. Um valor de 1 (unidade DIP/kernel) corresponde a um pixel em uma imagem a 96 DPI.
O tipo é FLOAT.
O valor padrão é 1,0f.
ScaleMode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
O modo de interpolação que o efeito usa para dimensionar a imagem para o comprimento da unidade do kernel correspondente. Há seis modos de escala que variam em qualidade e velocidade.
O tipo é D2D1_CONVOLVEMATRIX_SCALE_MODE.
O valor padrão é D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
A largura da matriz do kernel. As unidades são especificadas em unidades de kernel. O tipo é UINT32.
O valor padrão é 3.
KernelSizey
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
A altura da matriz do kernel. As unidades são especificadas em unidades de kernel. O tipo é UINT32.
O valor padrão é 3.
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
A matriz de kernel a ser aplicada à imagem. Os elementos kernel não são limitados e são especificados como floats.
O primeiro conjunto de kernelSizeX números no FLOAT[] corresponde à primeira linha no kernel. O segundo conjunto de kernelSizeX números correspondem à segunda linha e assim por diante até linhas de KernelSizeY.
O tipo é FLOAT[].
O valor padrão é {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}.
Divisor
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
A matriz de kernel é aplicada a um pixel e, em seguida, o resultado é dividido por esse valor.
0 se comporta como um valor de epsilon flutuante.
O tipo é FLOAT.
O valor padrão é 1,0f.
Viés
D2D1_CONVOLVEMATRIX_PROP_BIAS
O efeito aplica a matriz de kernel, o divisor e, em seguida, o viés é adicionado ao resultado. O viés é sem associação e sem unidade. O tipo é FLOAT.
O valor padrão é 0,0f.
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
Desloca o kernel de convolução de uma posição centralizada no pixel de saída para uma posição especificada para esquerda/direita e para cima/para baixo. O deslocamento é definido em unidades de kernel.
Com alguns deslocamentos e tamanhos de kernel, os exemplos de kernel de convolução não serão exibidos em um centro de imagem de pixel. Os valores de pixel para o exemplo de kernel são computados pela interpolação bidirecional.
O tipo é D2D1_VECTOR_2F.
O valor padrão é {0.0f, 0.0f}.
PreserveAlpha
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
Especifica se o kernel de convolução é aplicado ao canal alfa ou apenas aos canais de cor.
Se você definir isso como VERDADEIRO o kernel de convolução será aplicado somente aos canais de cores.
Se você definir isso como FALSE o kernel de convolução será aplicado a todos os canais.
O tipo é BOOL.
O valor padrão é FALSE.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
O modo usado para calcular a borda da imagem, flexível ou dura. Consulte modos de borda para obter mais informações.
O tipo é D2D1_BORDER_MODE.
O valor padrão é D2D1_BORDER_MODE_SOFT.
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
Se o efeito fixa valores de cor entre 0 e 1 antes que o efeito passe os valores para o próximo efeito no grafo. O efeito fixa os valores antes que ele premultiplie o alfa.
Se você definir isso como TRUE, o efeito fixará os valores. Se você definir isso como FALSE, o efeito não fixará os valores de cor, mas outros efeitos e a superfície de saída poderão fixar os valores se eles não forem de precisão alta o suficiente.
O tipo é BOOL.
O valor padrão é FALSE.

Modos de escala

Enumeração Descrição
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR Amostra o ponto único mais próximo e usa isso. Esse modo usa menos tempo de processamento, mas gera a imagem de menor qualidade.
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR Usa um exemplo de quatro pontos e interpolação linear. Esse modo gera uma imagem de qualidade mais alta do que o modo vizinho mais próximo.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC Usa um kernel cúbico de 16 amostras para interpolação. Esse modo usa mais tempo de processamento, mas gera uma imagem de qualidade mais alta.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR Usa 4 exemplos lineares em um único pixel para um bom anti-aliasing de borda. Esse modo é bom para reduzir verticalmente em pequenas quantidades em imagens com poucos pixels.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC Usa a filtragem anisotrópica para amostrar um padrão de acordo com a forma transformada do bitmap.
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC Usa um kernel cúbico de alta qualidade de tamanho variável para executar uma escala pré-down da imagem se o downscaling estiver envolvido na matriz de transformação. Em seguida, usa o modo de interpolação cúbica para a saída final.

Nota

Se você não selecionar um modo, o efeito será D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.

Modos de borda

Nome Descrição
D2D1_BORDER_MODE_SOFT O efeito armazena a imagem de entrada com pixels pretos transparentes para amostras fora dos limites de entrada quando aplica o kernel de convolução. Isso cria uma borda flexível para a imagem e, no processo, expande o bitmap de saída pelo tamanho do kernel.
D2D1_BORDER_MODE_HARD O efeito estende a imagem de entrada com uma transformação de borda do tipo espelho para amostras fora dos limites de entrada. O tamanho do bitmap de saída é igual ao tamanho do bitmap de entrada.

Bitmap de saída

O tamanho da saída do efeito depende do tamanho do kernel de convolução, do deslocamento do kernel, do comprimento da unidade do kernel e da configuração do modo de borda.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 e Platform Update para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Servidor mínimo com suporte Windows 8 e Platform Update para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect