Partager via


Effet de matrice convolve

Utilisez l’effet de matrice convolve pour appliquer un noyau 2D arbitraire à une image. Vous pouvez utiliser cet effet pour flouter, détecter des bords, des emboss ou affiner une image.

Le CLSID pour cet effet est CLSID_D2D1ConvolveMatrix.

Exemple d’image

L’exemple montre ici l’entrée et la sortie de l’effet de matrice convolve avec un noyau de 3 x 3.

Avant
l’image avant l’effet.
Après
l’image après la transformation.
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();

Propriétés d’effet

Nom complet et énumération d’index Description
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
Taille d’une unité dans le noyau. Les unités se trouvent dans (unité DIPs/noyau), où une unité de noyau est la taille de l’élément dans le noyau de convolution. La valeur 1 (unité DIP/noyau) correspond à un pixel d’une image à 96 PPP.
Le type est FLOAT.
La valeur par défaut est 1.0f.
ScaleMode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
Mode d’interpolation utilisé par l’effet pour mettre à l’échelle l’image à la longueur d’unité du noyau correspondante. Il existe six modes d’échelle qui varient en qualité et en vitesse.
Le type est D2D1_CONVOLVEMATRIX_SCALE_MODE.
La valeur par défaut est D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
Largeur de la matrice du noyau. Les unités sont spécifiées dans les unités de noyau. Le type est UINT32.
La valeur par défaut est 3.
KernelSizeY
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
Hauteur de la matrice du noyau. Les unités sont spécifiées dans les unités de noyau. Le type est UINT32.
La valeur par défaut est 3.
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
Matrice du noyau à appliquer à l’image. Les éléments du noyau ne sont pas limités et sont spécifiés en tant que floats.
Le premier jeu de KernelSizeX nombres dans float[] correspond à la première ligne du noyau. Le deuxième jeu de nombres KernelSizeX correspond à la deuxième ligne, et ainsi de suite jusqu’à lignes kernelSizeY.
Le type est FLOAT[].
La valeur par défaut est {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}.
Diviseur
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
La matrice du noyau est appliquée à un pixel, puis le résultat est divisé par cette valeur.
0 se comporte comme une valeur d’epsilon float.
Le type est FLOAT.
La valeur par défaut est 1.0f.
Biais
D2D1_CONVOLVEMATRIX_PROP_BIAS
L’effet applique la matrice du noyau, le diviseur, puis le biais est ajouté au résultat. Le biais n’est pas lié et sans unité. Le type est FLOAT.
La valeur par défaut est 0.0f.
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
Déplace le noyau de convolution d’une position centrée sur le pixel de sortie vers une position que vous spécifiez de gauche/droite et vers le haut/vers le bas. Le décalage est défini dans les unités du noyau.
Avec des décalages et des tailles de noyau, les échantillons du noyau de convolution ne atterrissent pas sur un centre d’images pixels. Les valeurs de pixels de l’exemple de noyau sont calculées par interpolation biligne.
Le type est D2D1_VECTOR_2F.
La valeur par défaut est {0.0f, 0.0f}.
PreserveAlpha
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
Spécifie si le noyau de convolution est appliqué au canal alpha ou uniquement aux canaux de couleur.
Si vous définissez cette valeur sur TRUE le noyau de convolution est appliqué uniquement aux canaux de couleur.
Si vous définissez cette valeur sur FALSE le noyau de convolution est appliqué à tous les canaux.
Le type est BOOL.
La valeur par défaut est FALSE.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
Mode utilisé pour calculer la bordure de l’image, douce ou dure. Pour plus d’informations, consultez modes bordure.
Le type est D2D1_BORDER_MODE.
La valeur par défaut est D2D1_BORDER_MODE_SOFT.
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
Indique si l’effet restreint les valeurs de couleur entre 0 et 1 avant que l’effet passe les valeurs à l’effet suivant dans le graphique. L’effet bloque les valeurs avant de prémultiplier l’alpha.
Si vous définissez cette valeur sur TRUE, l’effet bloque les valeurs. Si vous définissez cette valeur sur FALSE, l’effet ne serre pas les valeurs de couleur, mais d’autres effets et la surface de sortie peuvent limiter les valeurs si elles ne sont pas suffisamment précises.
Le type est BOOL.
La valeur par défaut est FALSE.

Modes d’échelle

Énumération Description
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR Échantillonne le point unique le plus proche et utilise cela. Ce mode utilise moins de temps de traitement, mais génère l’image de qualité la plus faible.
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR Utilise un exemple de quatre points et une interpolation linéaire. Ce mode génère une image de qualité supérieure au mode voisin le plus proche.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC Utilise un noyau cube de 16 exemples pour l’interpolation. Ce mode utilise le temps de traitement le plus élevé, mais génère une image de qualité supérieure.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR Utilise 4 exemples linéaires au sein d’un seul pixel pour une bonne anticrénelage de bord. Ce mode est utile pour effectuer un scale-down de petites quantités sur des images avec quelques pixels.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC Utilise le filtrage anisotropique pour échantillonner un modèle en fonction de la forme transformée de la bitmap.
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC Utilise un noyau cube de grande qualité de taille variable pour effectuer une mise à l’échelle antérieure à l’image si la mise à l’échelle inférieure est impliquée dans la matrice de transformation. Utilise ensuite le mode d’interpolation cubique pour la sortie finale.

Note

Si vous ne sélectionnez pas de mode, l’effet par défaut est D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.

Modes de bordure

Nom Description
D2D1_BORDER_MODE_SOFT L’effet pavét l’image d’entrée avec des pixels noirs transparents pour les exemples en dehors des limites d’entrée lorsqu’il applique le noyau de convolution. Cela crée un bord souple pour l’image et, dans le processus, développe la bitmap de sortie par la taille du noyau.
D2D1_BORDER_MODE_HARD L’effet étend l’image d’entrée avec une transformation de bordure de type miroir pour les exemples en dehors des limites d’entrée. La taille de la bitmap de sortie est égale à la taille de la bitmap d’entrée.

Bitmap de sortie

La taille de la sortie de l’effet dépend de la taille du noyau de convolution, du décalage du noyau, de la longueur de l’unité du noyau et du paramètre de mode bordure.

Exigences

Exigence Valeur
Client minimum pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimum pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
En-tête d2d1effects.h
Bibliothèque d2d1.lib, dxguid.lib

ID2D1Effect