Farbverlauf GDI+

  • Hi Leute,
    ich fang gerade mit GDI+ an, und möchte gerne einen sauberen Farbverlauf in einem "Kreistunnel" darstellen.
    Habt ihr eine Idee wie das ehen könnte?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <gdiplus.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 625, 192, 124)
    $hwnd = wingethandle($Form1)
    GUISetBkColor(0x0000)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $ParticleBitmap = _GDIPlus_BitmapCreateFromGraphics(625, 625, $hgraphic)
    $ParticleBuffer = _GDIPlus_ImageGetGraphicsContext($ParticleBitmap)
    $Pen = _GDIPlus_PenCreate(0, 1)
    _GDIPlus_GraphicsClear($ParticleBuffer)
    $i = 0
    $plus = 20
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    ; _gdiplus_graphicsclear($Particlebuffer)

    _GDIPlus_PenSetColor($Pen, "0xEF" & Hex($I*2, 2) & Hex($i*20, 2) & Hex($i*2, 2))
    _GDIPlus_GraphicsDrawEllipse($particlebuffer, 625/2-$i/2, 625/2-$i/2, $i, $i, $pen)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $ParticleBitmap, 0, 0, 625, 625)
    $i +=$plus
    sleep(1)
    ;if $i > 625 then exitloop
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    P.S.: Lustige optische Täuschung :D

    Danke schonmal!

  • Ich weiß nicht was du mit Kreistunnel meinst aber Farbverläufe gehen mit

    [autoit]


    Func _GDIPlus_BrushCreateLinear($iX1, $iY1, $iX2, $iY2, $iARGB1 = 0xFF000000, $iARGB2 = 0xFFFFFFFF)
    Local $aResult, $start, $end, $sPoint, $ePoint

    [/autoit][autoit][/autoit][autoit]

    $start = DllStructCreate("int X;int Y")
    DllStructSetData($start, "X", $iX1)
    DllStructSetData($start, "Y", $iY1)
    $sPoint = DllStructGetPtr($start)

    [/autoit][autoit][/autoit][autoit]

    $end = DllStructCreate("int X;int Y")
    DllStructSetData($end, "X", $iX2)
    DllStructSetData($end, "Y", $iY2)
    $ePoint = DllStructGetPtr($end)

    [/autoit][autoit][/autoit][autoit]

    $aResult = DllCall($ghGDIPDll, "int", "GdipCreateLineBrushI", "ptr", $sPoint, "ptr", $ePoint, "int", $iARGB1, "int", $iARGB2, "int", 0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)

    [/autoit][autoit][/autoit][autoit]

    Return SetError(0, $aResult[0], $aResult[6])
    EndFunc ;==>_GDIPlus_BrushCreateLinear

    [/autoit]