Partager via


Effet de matrice de convolution

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

Le CLSID de cet effet est CLSID_D2D1ConvolveMatrix.

Exemple d’image

L’exemple présente l’entrée et la sortie de l’effet de matrice de convolution avec un noyau de 3 x 3.

Avant
image avant l’effet.
Après
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 de l’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é DIP/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
La 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 liés et sont spécifiés en tant que floats.
Le premier jeu de nombres KernelSizeX 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’aux 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 ne dispose pas d’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 n’atterrissent pas sur un centre d’images pixels. Les valeurs de pixels de l’exemple de noyau sont calculées par interpolation bilinéaire.
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 VRAI, le noyau de convolution est appliqué uniquement aux canaux de couleur.
Si vous définissez cette valeur sur FAUX, le noyau de convolution est appliqué uniquement aux canaux de couleur.
Le type est BOOL.
La valeur par défaut est FAUX.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
Mode utilisé pour calculer la bordure de l’image, douce ou dure. Pour plus d’informations, consultez Modes de 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 VRAI, l’effet bloque les valeurs. Si vous définissez cette valeur sur FAUX, 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 FAUX.

Modes de mise à l'é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 échantillon 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 échantillons pour l’interpolation. Ce mode utilise plus de temps de traitement, mais génère une image de qualité supérieure.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR Utilise 4 échantillons linéaires au sein d’un seul pixel pour un bon anticrénelage de bord. Ce mode est utile pour effectuer un scale-down de petites quantités sur des images dotées de quelques pixels.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC Utilise le filtrage anisotropique pour échantillonner un modèle en fonction de la forme transformée de l’image 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.

Remarque

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 remplit l’image d’entrée avec des pixels noirs transparents pour les échantillons en dehors des limites d’entrée lorsqu’il applique le noyau de convolution. Cela crée une bordure arrondie pour l’image et, dans le processus, développe l’image bitmap de sortie de 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 échantillons en dehors des limites d’entrée. La taille de l’image bitmap de sortie est égale à la taille de l’image 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.

Spécifications

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

ID2D1Effect