Farbverlauf in Autoit

  • Hi ist es eigentlich möglich mit Autoit einen Farbferlauf zu machen
    zb. oben dunkel mitte ein wenig heller und unten hell

    wenn ja wie

  • In einem controll zb. label
    Ich kenne mich mit den zahlen von dem link nicht aus kann mir das mal jemand erklären

    • Offizieller Beitrag

    Die Farbverwaltung bei AutoIt entspricht einem 24bit RGB-Farbraum. Für jede der drei Grundfarben stehen 8bit zur Verfügung. Mit 8bit kann man 256 verschiedene Zustände speichern (siehe Dualsystem). Jede der drei Grundfarben kann also einen Wert von 0...255 (dezimal) oder 00...FF (hexadezimal) annehmen. Je höher der Wert, umso heller wird die Farbe.
    Ein Farbwert von 0x000000 (hexadezimal) entspricht der Farbe Schwarz, 0xFFFFFF hingegen repräsentiert die Farbe Weiß. Verändert man nur eine der Grundfarben erhält man Rot (0xFF0000), Grün (0x00FF00) oder Blau (0x0000FF).
    Dabei kann man die drei Grundfarben beliebig mischen. Bei einem Farbverlauf von Dunkel nach Hell verändert man die Werte der drei Grundfarben gleichmäßig (z.B. indem man für jede Abstufung jeweils einen bestimmten Wert addiert).
    Ein Farbverlauf zwischen zwei, drei oder mehreren Farben ist hingegen abhängig vom Programmierer. Dabei kann man die Werte ganz unterschiedlich verändern, sodass es am Ende einen schönen Übergang ergibt. Was "schön" ist, liegt dann im Auge des Betrachters. ;)

  • Aha
    wie bekomme ich dann folgndes mit orange hin, komm mit dem hex zeug noch nicht ganz mit

    [autoit]

    $hGui = GUICreate('test', 400, 256)
    For $i = 0 To 255
    GUICtrlCreateLabel('', 0, $i, 400, 1)
    $sColor = '0x' & Hex($i, 2) & Hex($i, 2) & Hex($i, 2)
    GUICtrlSetBkColor(-1, $sColor)
    Next
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • @progandy danke
    wie kann ich dann hier die farbe ändern

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    Dim $GUIWidth = 400
    Dim $GUIHeight = 400
    GUICreate("Vertical Gradient", $GUIWidth, $GUIHeight) ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box
    $Graphic = GUICtrlCreateGraphic (0,0, $GUIWidth, $GUIHeight) ;Fill GUI wwith vertical gradient

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

    GradientFill($Graphic, 0, 0, $GUIWidth, $GUIHeight, _ArrayCreate(0,0,0), _ArrayCreate(255,255,255));

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

    GUICtrlSetGraphic($Graphic,$GUI_GR_REFRESH)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    Func GradientFill($im, $x1, $y1, $width, $height, $left_color, $right_color)
    $color0=($left_color[0]-$right_color[0])/$height
    $color1=($left_color[1]-$right_color[1])/$height
    $color2=($left_color[2]-$right_color[2])/$height
    For $Y=0 to $height
    $red=$left_color[0]-floor($Y*$color0)
    $green=$left_color[1]-floor($Y*$color1)
    $blue=$left_color[2]-floor($Y*$color2) ;Convert RGB to decimal
    $col = Dec(Hex($red,2) & Hex($green,2) & Hex($blue,2))
    GUICtrlSetGraphic($im,$GUI_GR_COLOR, $col)
    GUICtrlSetGraphic($im,$GUI_GR_MOVE,0,$Y)
    GUICtrlSetGraphic($im,$GUI_GR_LINE,$GUIWidth,$Y)
    Next
    EndFunc

    [/autoit]
  • siehst du die beiden _ArrayCreate? da werden die beiden Farben angegeben, aufgetrennt in die Werte für die 3 Grundfarben.
    //Edit: ich habs mal geändert, dass auch wirklich die Parameter der Funktion verwendet werden und die Farben "normal" angegeben werden:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    Dim $GUIWidth = 400
    Dim $GUIHeight = 400
    GUICreate("Vertical Gradient", $GUIWidth, $GUIHeight) ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box
    $Graphic = GUICtrlCreateGraphic (0,0, $GUIWidth, $GUIHeight) ;Fill GUI wwith vertical gradient

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

    GradientFill($Graphic, 40, 40, $GUIWidth-80, $GUIHeight-80, 0xFF0000, 0x00FF00);

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

    GUICtrlSetGraphic($Graphic,$GUI_GR_REFRESH)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    Func GradientFill($im, $x1, $y1, $width, $height, $left_color, $right_color)
    Local $left_red = BitAND(BitShift($left_color,16), 0xFF)
    Local $left_green = BitAND(BitShift($left_color,8), 0xFF)
    Local $left_blue = BitAND($left_color, 0xFF)
    Local $right_red = BitAND(BitShift($right_color,16), 0xFF)
    Local $right_green = BitAND(BitShift($right_color,8), 0xFF)
    Local $right_blue = BitAND($right_color, 0xFF)
    Local $color0=($left_red-$right_red)/$height
    Local $color1=($left_green-$right_green)/$height
    Local $color2=($left_blue-$right_blue)/$height
    Local $red, $green, $blue, $col
    For $Y=0 to $height
    $red=$left_red-floor($Y*$color0)
    $green=$left_green-floor($Y*$color1)
    $blue=$left_blue-floor($Y*$color2) ;Convert RGB to decimal
    $col = Dec(Hex($red,2) & Hex($green,2) & Hex($blue,2))
    GUICtrlSetGraphic($im,$GUI_GR_COLOR, $col)
    GUICtrlSetGraphic($im,$GUI_GR_MOVE,$x1,$Y+$y1)
    GUICtrlSetGraphic($im,$GUI_GR_LINE,$x1+$width,$Y+$y1)
    Next
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (3. August 2009 um 12:32)

  • Vielen Dank
    Hab noch ne Frage
    Wie kann ich hier

    Spoiler anzeigen
    [autoit]

    Func GraphicDots($id, $x, $y, $width, $height,$color)
    For $y = 0 to $height
    GUICtrlSetGraphic($id,$GUI_GR_COLOR, $color)
    GUICtrlSetGraphic($id,$GUI_GR_MOVE,$x+$x,$y+$y)
    GUICtrlSetGraphic($id,$GUI_GR_DOT,$x+$x,$y+$y)
    Next
    GUICtrlSEtGraphic($id,$GUI_GR_CLOSE)
    EndFunc

    [/autoit]

    Die Punkte über die Ganze gui verteilen

    Edit:
    So komme ich schon rechts und oben entlang+

    Spoiler anzeigen
    [autoit]

    Func GraphicDots($id, $x, $y, $width, $height,$color)
    For $y = 0 to $height
    GUICtrlSetGraphic($id,$GUI_GR_COLOR, $color)
    GUICtrlSetGraphic($id,$GUI_GR_MOVE,$x+$x,$y+$y)
    GUICtrlSetGraphic($id,$GUI_GR_DOT,$x+$x,$y+$y)
    Next
    For $y = 0 to $width
    GUICtrlSetGraphic($id,$GUI_GR_COLOR, $color)
    GUICtrlSetGraphic($id,$GUI_GR_MOVE,$y+$y,$x+$x)
    GUICtrlSetGraphic($id,$GUI_GR_DOT,$y+$y,$x+$x)
    Next
    GUICtrlSEtGraphic($id,$GUI_GR_CLOSE)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von simon (3. August 2009 um 14:36)