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
- Propriétés de l’effet
- Modes de mise à l'échelle
- Modes de bordure
- Image bitmap de sortie
- Exigences
- Rubriques connexes
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 |
---|
Aprè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();
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 |