GdipScaleLineTransform()



Syntaxe
Resultat.i = GdipScaleLineTransform(*brush, sx.f, sy.f, order.i)
Paramètres
*brush

[in] Pointeur sur un objet LinearGradientBrush.

sx.f

[in] Coefficient multiplicateur (valeur d'ajustement) de la transformation dans la direction de l'axe x.

sy.f

[in] Coefficient multiplicateur (valeur d'ajustement) de la transformation dans la direction de l'axe y.

order.i

[in] Élément de l'énumération MatrixOrder qui indique l'ordre de la multiplication des matrices. MatrixOrderPrepend indique que la multiplication se fait de gauche à droite et MatrixOrderAppend indique que la multiplication se fait de droite à gauche. La valeur par défaut est MatrixOrderPrepend. Ces valeurs déterminent l'ordre d'application des transformations tel que défini par l'énumération MatrixOrder.

Description
Cette fonction met à jour la matrice de transformation courante de la brush avec le résultat du produit de la matrice courante et d'une matrice de mise à l'échelle dont les valeurs sont contenues dans les paramètres sx.f et sy.f.
En conséquence, le dégradé subit une transformation en fonction des valeurs passées par sx.f et sy.f en suivant l'ordre définit par order.l.

Cette fonction effectue une mise à l'échelle de la brush.

La brush n'est pas redimensionnée (un appel à une des fonctions comme GdipGetLineRect() ou GdipGetLineRectI() retourne la taille d'origine de la brush), mais c'est la matrice de transformation appliquée à la brush qui va modifier le rendu par rapport à la brush d'origine.

Si par exemple une brush est rectangulaire (200 x 200), le dégradé en largeur s'étend sur 200 pixels.
La mise à l'échelle avec par exemple sx = 2 permet à la brush de recalculer le dégradé sur une largeur de 400 pixels (200X2). On aura dans ce cas de figure un doublement horizontal du rendu de la brush (mais la brush a toujours la même taille).
L'exemple qui suit montre que la brush de 50 pixels de largeur se comporte comme une brush de 200 pixels de largeur.

Voici un exemple de fonctionnement :

On défini une image de 200 x 200 et une brush de 50 x 50 (brush d'origine).
La brush est définie avec la fonction  GdipCreateLineBrushFromRect()
La première couleur est le rouge et la couleur d'arrivée le blanc.
Mode #LinearGradientModeHorizontal
WrapMode #
WrapModeTile

Il y aura répétition du motif 4 fois.

Voici le rendu de la brush sur l'image (aucune rotation)

Exemple :

On va appliquer à cette brush, la mise à l'échelle suivante :
sx.f = 4

sy.f = 1

sx valant 4, on aura la largeur de la brush qui sera redimensionnée comme ceci (en x)

50 x 4 = 200 (la largeur est multipliée par sx)

sy valant 1, on aura la largeur de la brush qui ne sera pas modifiée (en y)

50 x 1 = 50 (la hauteur est multipliée par sy)

Code :
; Application de la mise à l'échelle
        GdipScaleLineTransform(*brush2, 4, 1, #MatrixOrderAppend)

Voici le rendu de la brush sur l'image

Le dégradé s'applique sur une largeur de 200 pixel au lieu de 50.

Résultat de la fonction
Si la fonction réussit, elle retourne #Ok qui est une constante de l'énumération status.
Si la fonction échoue, elle retourne une des autres valeurs de l'énumération status.
PB - OS
PureBasic v4.30 bêta 4 (Windows - x86)
Testé avec Windows Vista édition familiale Premium