Crée une spline cardinale fermée à partir d'un tableau de points et utilise un pinceau pour remplir l'intérieur de la spline
#include <GDIPlus.au3>
_GDIPlus_GraphicsFillClosedCurve2 ( $hGraphics, $aPoints, $nTension [, $hBrush = 0 [, $iFillMode = 0]] )
$hGraphics | Handle de l'objet Graphics |
$aPoints | Tableau de points qui spécifie les coordonnées de la spline cardinale fermée: [0][0] - Nombre de points [1][0] - Point 1: abscisse X [1][1] - Point 1: ordonnée Y [2][0] - Point 2: abscisse X [2][1] - Point 2: ordonnée Y [n][0] - Point n: abscisse X [n][1] - Point n: ordonnée Y |
$nTension | Nombre qui spécifie comment la spline sera tendue sur les points |
$hBrush | [optionnel] Handle de l'objet Brush (pinceau) qui est utilisé pour remplir la spline cardinale. Si 0, un pinceau noir sera utilisé. |
$iFillMode | [optionnel] Mode de remplissage de l'intérieur de la spline: 0 - Les zones sont remplis conformément à la règle de parité pair-impair 1 - Les zones sont remplis selon la règle d'enroulement (winding) non nul |
Succès: | Retourne True. |
Échec: | Retourne False et définit @error <> 0, @extended contient le code erreur GPSTATUS ($GPID_ERR*). |
_GDIPlus_GraphicsFillClosedCurve
Consultez GdipFillClosedCurve2 dans la Librairie MSDN.
#include <GDIPlus.au3> #include <GUIConstantsEx.au3> Global $g_hGUI, $g_hGfxCtxt, $g_hBitmap, $g_hGraphics, $g_hBrush Example() Func Example() AutoItSetOption("GUIOnEventMode", 1) _GDIPlus_Startup() ; Initialise GDI+ Local Const $iWidth = 600, $iHeight = 600, $iBgColor = 0x303030 ; $iBGColor est au format RRGGBB $g_hGUI = GUICreate("GDI+ example", $iWidth, $iHeight) ; Crée une fenêtre de test GUISetBkColor($iBgColor, $g_hGUI) ; Définit la couleur de fond de la GUI GUISetState(@SW_SHOW) ; Crée un buffer graphique pour fluidifier les déplacements de l'objet gfx $g_hGraphics = _GDIPlus_GraphicsCreateFromHWND($g_hGUI) ; Crée un objet Graphics à partir du handle de la fenêtre $g_hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $g_hGraphics) $g_hGfxCtxt = _GDIPlus_ImageGetGraphicsContext($g_hBitmap) _GDIPlus_GraphicsSetSmoothingMode($g_hGfxCtxt, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ; Définit pour l'objet graphique la qualité de rendu antialiasing $g_hBrush = _GDIPlus_BrushCreateSolid(0xFF80FF60) Local $aPoints[11][4], $x, $y $aPoints[0][0] = 10 For $y = 0 To 1 For $x = 1 To 5 $aPoints[$y * 5 + $x][0] = 100 + 300 * $y + 50 ; Coordonnée x du point $aPoints[$y * 5 + $x][1] = 150 + $x * 50 ; Coordonnée y du point $aPoints[$y * 5 + $x][2] = Random(-2, 2) ; Composante x du vecteur associé au point $aPoints[$y * 5 + $x][3] = Random(-2, 2) ; Composante y du vecteur associé au point Next Next GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") Do _GDIPlus_GraphicsClear($g_hGfxCtxt, 0xFF000000 + $iBgColor) ; Efface le bitmap pour le repeindre _GDIPlus_GraphicsFillClosedCurve2($g_hGfxCtxt, $aPoints, 0.75, $g_hBrush) ; Trace la courbe fermée _GDIPlus_GraphicsDrawImage($g_hGraphics, $g_hBitmap, 0, 0) ; Copie bitmap sur le handle graphique (GUI) For $y = 1 To $aPoints[0][0] $aPoints[$y][0] += $aPoints[$y][2] ; Calcule la nouvelle position x If $aPoints[$y][0] < 0 Or $aPoints[$y][0] > $iWidth Then $aPoints[$y][2] *= -1 ; Si la bordure verticale est atteinte la composante x du vecteur change de signe $aPoints[$y][1] += $aPoints[$y][3] ; Calculer la nouvelle position y If $aPoints[$y][1] < 0 Or $aPoints[$y][1] > $iHeight Then $aPoints[$y][3] *= -1 ; Si la bordure horizontale est atteinte la composante y du vecteur change de signe Next Until Not Sleep(30) ; Pause 30 ms pour éviter une utilisation élevée du processeur EndFunc ;==>Example Func _Exit() ; Nettoie les ressources GDI+ _GDIPlus_BrushDispose($g_hBrush) _GDIPlus_GraphicsDispose($g_hGfxCtxt) _GDIPlus_GraphicsDispose($g_hGraphics) _GDIPlus_BitmapDispose($g_hBitmap) _GDIPlus_Shutdown() GUIDelete($g_hGUI) Exit EndFunc ;==>_Exit