Effet de transformation affine 2D
L’effet de transformation affine 2D applique une transformation spatiale à une image basée sur une matrice 3X2 à l’aide de la transformation de matrice Direct2D et de l’un des six modes d’interpolation. Vous pouvez utiliser cet effet pour faire pivoter, mettre à l’échelle, asymétrie ou convertir une image. Vous pouvez également combiner ces opérations. Les transferts affines préservent les lignes parallèles et le ratio des distances entre les trois points d’une image.
Le CLSID pour cet effet est CLSID_D2D12DAffineTransform.
- Exemple d’image
- Propriétés de l’effet
- Modes de bordure
- Modes d’interpolation
- Image bitmap de sortie
- Exigences
- Rubriques connexes
Exemple d’image
Avant |
---|
Après |
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);
affineTransformEffect->SetInput(0, bitmap);
D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f, 0.1f, 0.9f, 8.0f, 45.0f);
affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(affineTransformEffect.Get());
m_d2dContext->EndDraw();
Cet effet effectue l’opération de matrice suivante :
Bien que la matrice d’entrée soit définie comme une matrice 3x2, la dernière colonne est remplie avec 0, 0 et 1 pour produire une matrice carrée. Cela permet la multiplication de matrices, afin que les transformations puissent être concaténées en une seule matrice.
Propriétés de l’effet
Nom complet et énumération d’index | Description |
---|---|
InterpolationMode D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE |
Mode d’interpolation utilisé pour mettre à l’échelle l’image. Il existe 6 modes d’échelle qui varient en qualité et en vitesse. Le type est D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE. La valeur par défaut est D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR. |
BorderMode D2D1_2DAFFINETRANSFORM_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. |
TransformMatrix D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX |
Matrice 3x2 pour transformer l’image à l’aide de la transformation de matrice Direct2D. Le type est D2D1_MATRIX_3X2_F. La valeur par défaut est Matrix3x2F::Identity(). |
Netteté D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS |
En mode d’interpolation cube de haute qualité, niveau de netteté du filtre de mise à l’échelle sous forme de flotteur compris entre 0 et 1. Les valeurs sont sans unité. Vous pouvez utiliser la netteté pour ajuster la qualité d’une image lorsque vous mettez à l’échelle l’image. Le facteur de netteté affecte la forme du noyau. Plus le facteur de netteté est élevé, plus le noyau est petit. Remarque : cette propriété affecte uniquement le mode d’interpolation cube de haute qualité. Le type est FLOAT. La valeur par défaut est 0.0f. |
Modes de bordure
Nom | Description |
---|---|
D2D1_BORDER_MODE_SOFT | L’effet remplit l’image avec des pixels noirs transparents pendant qu’elle interpole, ce qui produit une bordure arrondie. |
D2D1_BORDER_MODE_HARD | L’effet bloque la sortie à la taille de l’image d’entrée. |
Modes d’interpolation
Énumération | Description |
---|---|
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR | Utilise un échantillon de quatre points et une interpolation linéaire. Ce mode utilise plus de temps de traitement que le mode plus proche voisin, mais génère une image de qualité supérieure. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | Utilise le filtrage anisotropique pour échantillonner un modèle en fonction de la forme transformée de l’image bitmap. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.
Remarque
Le mode anisotropique génère des mipmaps lors de la mise à l’échelle. Toutefois, si vous définissez la propriété Mise en cache sur vrai sur les effets qui sont entrés dans cet effet, les mipmaps ne sont pas générés chaque fois pour des images suffisamment petites.
Bitmap de sortie
La taille de l’image bitmap de sortie dépend de la matrice de transformation appliquée à l’image.
L’effet effectue l’opération de transformation, puis applique une zone englobante autour du résultat. L’image bitmap de sortie est la taille du rectangle englobant.
Spécifications
Condition requise | Value |
---|---|
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 |