GdipGetPathGradientSurroundColorsWithCount()



Syntaxe
Resultat.i = GdipGetPathGradientSurroundColorsWithCount(*brush, *color.integer, @count.l)
Paramètres
*brush

[in] Pointeur sur un objet PathGradientBrush.

*color

[in, out] Pointeur sur une zone mémoire représentant un tableau qui recevra les couleurs de chaque point du contour, au format ARGB.

count.l

[out] count recevra le nombre de couleurs du contour de la brush.

Description
Cette fonction permet de retrouver le nombre de couleurs ainsi que les couleurs pour chaque point du contour. Ces couleurs doivent avoir été appliquées préalablement par la fonction GdipSetPathGradientSurroundColorsWithCount().

Reportez-vous à cette fonction pour plus d'informations.

Si aucune couleur n'a été appliquée avec GdipSetPathGradientSurroundColorsWithCount(), la fonction retourne la valeur 1 dans count car il y a par défaut une couleur unique de contour qui est le blanc et color n'a qu'un seul élément qui contient la couleur blanche au format ARGB.

Lorsque l'on retrouve une couleur avec cette commande, il faut la modifier à l'aide de la fonction ARGBEX() qui se trouve dans le fichier gdiplus.pbi pour obtenir la valeur correcte.


Voici un code type d'utilisation de la fonction (code Microsoft en C  adapté en PureBasic v4.30 bêta 4 (Windows - x86))

Procedure.l GetSurroundColors(nativeBrush.i, *colors.integer, *count.long)
  
  Protected   count1.l, status.i, argbs.i, i.i
  
  If *colors = #Null Or *count = #Null
    ProcedureReturn #InvalidParameter
  EndIf
  
  status = GdipGetPathGradientSurroundColorCount(nativeBrush, @count1)
  
  If status <> #Ok
    ProcedureReturn status
  EndIf
  
  If((*count < count1) Or (count1 <= 0))
    ProcedureReturn #InsufficientBuffer
  EndIf
  
  argbs = AllocateMemory(4 *count1)   ; tableau ARGB qui recevra les couleurs
  If argbs = #Null
    ProcedureReturn #OutOfMemory
  EndIf
  
  status = GdipGetPathGradientSurroundColorsWithCount(nativeBrush, argbs, @count1)
  
  If status = #Ok
    For i = 0 To count1-1
      PokeL(*colors + (i*4), PeekL(argbs + (i*4)))
    Next i
    PokeL(*count, count1)
  EndIf
  FreeMemory(argbs)
  ProcedureReturn status
EndProcedure

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