GdipCreateLineBrushFromRectWithAngle()



Syntaxe
Resultat.i = GdipCreateLineBrushFromRectWithAngle(@rect.RectF, color1.i, color2.i, angle.f, isAngleScalable.i, wrapMode.i, @*lineGradient)
Paramètres
rect.RectF

[in] Coordonnées du rectangle (sous forme de valeurs de type flottant) ou le dégradé sera positionné.

color1.i

[in] Couleur ARGB de la limite du départ du dégradé.

color2.i

[in] Couleur ARGB de la limite d'arrivé du dégradé.

angle.f

[in] Angle de base à partir duquel l'angle de direction sera calculé. Cet angle est mesuré à partir du haut du rectangle (rect.RectF) et est exprimé en degrés.
Le dégradé suit la ligne de direction (angle calculé à partir de l'angle de base et de la formule donnée dans la description). Cet angle peut évoluer ou non en fonction du paramètre isAngleScalable.

isAngleScalable.i

[in] Valeur booléenne qui indique si l'angle est évolutif ou non.
Si le paramètre isAngleScalable vaut #True, l'angle est évolutif et angle  indique l'angle de base à partir duquel l'angle de la ligne de direction est calculé.
Si le paramètre isAngleScalable vaut #False, l'angle n'est pas évolutif et angle  indique l'angle de la ligne de direction.

wrapMode.i

[in] Ce paramètre spécifie la manière dont une texture ou un dégradé est disposé. Si la texture ou le dégradé est plus petit que la zone à remplir, il est disposé en mosaïque selon un des formats de l'énumération Wrapmode.

*lineGradient

[out] *LineGradient recevra l'identifiant système de l'objet brush créé.

Description

La fonction crée un objet brush à partir des 2 couleurs color1 et color2. Si la brush est plus petite que la zone à remplir, il y aura répétition du motif. Cette brush permet d'introduire une rotation angulaire à partir du point haut du rectangle (Si x et y valent 0, c'est l'origine de la brush, sinon on introduit un décalage en x et/ou y).

Angle évolutif ou non:

L'angle de direction peut être l'angle de base si isAngleScalable vaut #False, sinon l'angle de direction est calculé par la fonction.

La ligne de direction est "une ligne droite imaginaire" qui est définie par le point de départ (coin supérieur gauche du rectangle rect.RectF) et l'angle angle.f. Le début du dégradé est une ligne droite qui est perpendiculaire à la ligne de direction et qui traverse le point de départ. La fin du dégradé est une ligne droite qui est parallèle à la ligne du début du dégradé et qui traverse le point final (coin inférieur droit du rectangle rect.RectF).
La couleur du dégradé est constante le long des lignes qui sont parallèles aux lignes de début et de fin.

Le dégradé change graduellement à partir de la couleur du début jusqu'à la couleur de fin en suivant la ligne de direction. Si isAngleScalable vaut #True, l'angle de base est calculé pour produire l'angle de la ligne de direction :

ß = arctan( (largeur / hauteur) tan(ø) )

ou ß est le nouvel angle de la ligne de direction
largeur et hauteur sont les dimensions du rectangle rectF
ø est l'angle de base défini par angle
La relation n'est valide que si l'angle est inférieur à 90 degrés (source Microsoft)

On peut faire évoluer l'angle entre 0 et 360 degrés (ou plus) et le passage par 90 ou 270 n'entraîne pas d'instabilité de la fonction (au moins sur l'exemple du fichier).

Voici un croquis qui montre comment le dégradé évolue en fonction de l'angle de base et des valeurs largeur et hauteur de la brush.

Prenons l'exemple suivant :

Angle de base 45° (angle.f = 45.0)
Largeur de la brush : 200 pixels
Hauteur de la brush : 200 pixels

Si on applique la formule, l'angle final sera le suivant :

ß = arctan( (largeur / hauteur) tan(ø) )
ß = arctan( (200 / 200) tan(45) )
ß = arctan( tan(45 ) = 45°

Voici le croquis avec les lignes de direction, de début et de fin (voir les définitions plus haut)

La couleur du dégradé est constante le long des lignes qui sont parallèles aux lignes de début et de fin.

L'exemple du fichier montre la rotation angulaire et si vous sélectionnez un angle de 45 degrés, vous verrez que la couleur est constante le long des lignes de début et de fin.

Autre exemple :

Angle de base 120° (angle.f = 120.0)
Largeur de la brush : 200 pixels
Hauteur de la brush : 200 pixels

Si on applique la formule, l'angle final sera le suivant :

ß = arctan( (largeur / hauteur) tan(ø) )
ß = arctan( (200 / 200) tan(120) )
ß = arctanotan(120) = -60°

Les couleurs passées en paramètre aux brush doivent avoir été préalablement modifiées par la procédure ARGB (voir le fichier gdiplus.pbi)

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