Efeito da matriz de convolve
Use o efeito de matriz de convolve para aplicar um kernel 2D arbitrário a uma imagem. Pode utilizar este efeito para desfocar, detetar arestas, gravar em relevo ou tornar uma imagem mais nítida.
O CLSID para este efeito é CLSID_D2D1ConvolveMatrix.
- Imagem de exemplo
- Propriedades de efeito
- Modos de escala
- Modos de borda
- Bitmap de saída
- Requisitos
- Tópicos relacionados
Imagem de exemplo
O exemplo aqui mostra a entrada e saída do efeito de matriz convolve com um kernel 3 x 3.
Antes |
---|
![]() |
Após |
![]() |
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 do efeito
Nome para 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 (DIPs/unidade kernel), onde uma unidade kernel é o 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. |
Modo de escala D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE |
O modo de interpolação que o efeito usa para dimensionar a imagem para o comprimento correspondente da unidade do kernel. Existem 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 do 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 do kernel. O tipo é UINT32. O valor padrão é 3. |
KernelMatrix D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX |
A matriz do kernel a ser aplicada à imagem. Os elementos do kernel não são limitados e são especificados como floats. O primeiro conjunto de números de KernelSizeX no FLOAT[] corresponde à primeira linha no kernel. O segundo conjunto de números de KernelSizeX corresponde à segunda linha, e assim por diante até KernelSizeY linhas. 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 do kernel é aplicada a um pixel e, em seguida, o resultado é dividido por esse valor. 0 comporta-se como um valor de epsilon flutuante. O tipo é FLOAT. O valor padrão é 1.0f. |
Enviesamento D2D1_CONVOLVEMATRIX_PROP_BIAS |
O efeito aplica a matriz do kernel, o divisor e, em seguida, o viés é adicionado ao resultado. O preconceito é ilimitado 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 esquerda/direita e para cima/baixo. O deslocamento é definido em unidades do kernel. Com alguns deslocamentos e tamanhos de kernel, as amostras do kernel de convolução não pousam em um centro de imagem de pixel. Os valores de pixel para a amostra do kernel são calculados por interpolação bilinear. O tipo é D2D1_VETOR_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 TRUE o kernel de convolução será aplicado apenas aos canais de cor. 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, suave ou hard. 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 os valores de cor entre 0 e 1 antes que o efeito passe os valores para o próximo efeito no gráfico. O efeito fixa os valores antes de pré-multiplicar o alfa. Se você definir isso como TRUE, o efeito apertará 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 apertar os valores se eles não forem de precisão suficiente. O tipo é BOOL. O valor padrão é FALSE. |
Modos de escala
Enumeração | Descrição |
---|---|
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR | Recolhe amostras do ponto único mais próximo e utiliza-o. Este modo usa menos tempo de processamento, mas produz a imagem de menor qualidade. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR | Utiliza uma amostra de quatro pontos e interpolação linear. Este modo produz uma imagem de qualidade superior ao modo vizinho mais próximo. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC | Usa um núcleo cúbico de 16 amostras para interpolação. Este modo utiliza a maior parte do tempo de processamento, mas produz uma imagem de qualidade superior. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR | Usa 4 amostras lineares dentro de um único pixel para uma boa suavização de borda. Este modo é bom para reduzir em pequenas quantidades em imagens com poucos pixels. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC | Usa filtragem anisotrópica para obter amostras de 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 um pré-downscale 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. |
Observação
Se você não selecionar um modo, o efeito será D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR como padrão.
Modos de borda
Designação | Descrição |
---|---|
D2D1_BORDER_MODE_SOFT | O efeito preenche 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 suave 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.
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 |