[GDI+]Punkte machen und mit For Next die Farben ändern

  • Hallo Leute, hab mich seite langem nicht mehr gemeldet... bin etwas mit Gba Programmation beschäftigt(noch nichts zustande gebracht) :S :rolleyes: :D


    Ich hab ne Gui mit GDI+, ich will Punkte mit Farben machen und die Farbe ändern

    so meine Frage ist:

    1- wie heisst die Funktion für die Punkte ( wie das . )

    2- wie kann ich die Farbe der Punkte ändern? z.B. soll mit "For To Next" sein

    3- wie heissen die Hexcodes für die Regenbogenfarben?


    die hilfe nützt einem nix, wenn man nicht genau weiss, was man sucht.. :D

  • Ich kenn mich zwar nicht mit GDI Plus aus, aber naja.
    zu 1)

    [autoit]

    _GDIPlus_GraphicsDrawEllipse()

    [/autoit]


    zu 2) Das geht glaube ich mit

    [autoit]

    _GDIPlus_BrushCreateSolid()

    [/autoit]


    zu 3) Die sind afaik immer so aufgebaut:
    0xARGB
    Also 0x Alpha Rot Grün Blau
    Bsp:
    0xFF000000 wäre schwarz
    0xFFFFFFFF wäre weiß

  • @ Ineluk:

    [autoit]


    ;Für
    _GDIPlus_GraphicsDrawEllipse()
    ;brauchst du
    _GDIPlus_PenCreate()
    ;Den Pen später wieder disposen mit
    _GDIPlus_PenDispose()

    [/autoit][autoit]


    ;Für
    _GDIPlus_GraphicsFillEllipse()
    ;brauchst du
    _GDIPlus_BrushCreateSolid()
    ;Den Brush später wieder disposen mit
    _GDIPlus_BrushDispose()

    [/autoit]

    Die einzelnen Parameter stehen ja in der Hilfe

  • Zitat

    2- wie kann ich die Farbe der Punkte ändern? z.B. soll mit "For To Next" sein


    Gar nicht :P. In GDI+ kannst du nur "malen" und "übermalen" ;). Du musst also entweder mit _GDIPlus_GraphicsClear die Grafik komplett übermalen oder die einzelnen Punkte einfach noch einmal in einer anderen Farbe zeichnen.

  • Ich glaube er meint übermalen oder woanders hinmalen, das geht so:

    [autoit]


    _GDIPlus_Startup()
    $b=_GDIPlus_BrushCreateSolid("0xFF000000")
    $gra=_gdiplus_graphicscreateFromHwnd($deinfenster)
    _gdiplus_GraphicsFillRect($gra,$x,$y,1,1,$b)
    for $i=1 to 255
    _gdiplus_brushsetsolidcolor($b,"0xFF"&hex($i,2)&"0000")
    _gdiplus_graphicsfillrect($gra,$x,$y,1,1,$b)
    next
    _gdiplus_brushdispose($b)
    _gdiplus_graphicsdispose($gra)

    [/autoit]

    PS:
    Rect oder Ellipse ist egal, Pixel bleibt Pixel

  • Ineluki
    ich kenne die 0x..... mit transparenz
    clezZ
    danke für die Funcs
    name22
    davon hab ich mal gehört ^^
    TheShadowAE
    ich will eine Art Pixel Ladebalken machen
    also übermalen.
    ---------------------------------------------------------
    ich will nur mit 1x1 pixel coden

  • Learning by self... ^^
    Code: (so ähnlich hab ichs gemeint)
    Kann ich die Rechtecke mit Farbe(!) füllen? hab in der hilfe gesucht, aber nichts gefunden

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode",1)
    ;-----------------------------------------------
    $hGUI = GUICreate("Form1", 169, 70, 557, 78)
    GUISetOnEvent(-3,"death")
    ;---------
    $Button1 = GUICtrlCreateButton("LOS", 88, 8, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent($Button1,"load")
    ;---------
    GUISetState(@SW_SHOW)
    ;-----------------------------------------------
    _GDIPlus_Startup ()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    $hPen1 = _GDIPlus_PenCreate (0xFF000000);Schwarz
    $hPen2 = _GDIPlus_PenCreate (0xFF404040);Grau
    $hPen3 = _GDIPlus_PenCreate (0xFFFF0000);Rot
    $hPen4 = _GDIPlus_PenCreate (0xFFFF6A00);Orange
    $hPen5 = _GDIPlus_PenCreate (0xFFFFD800);Gelb
    $hPen6 = _GDIPlus_PenCreate (0xFFB6FF00);Gelbgrün
    $hPen7 = _GDIPlus_PenCreate (0xFF4CFF00);Grün
    $hPen8 = _GDIPlus_PenCreate (0xFF00FF21);Grün2
    $hPen9 = _GDIPlus_PenCreate (0xFF00FF90);GrünBlau
    $hPen10 = _GDIPlus_PenCreate (0xFF00FFFF);HellBlau
    $hPen11 = _GDIPlus_PenCreate (0xFF0094FF);Blau
    $hPen12 = _GDIPlus_PenCreate (0xFF0026FF);DunkelBlau
    $hPen13 = _GDIPlus_PenCreate (0xFF4800FF);Violett
    $hPen14 = _GDIPlus_PenCreate (0xFFB200FF);Pink
    $hPen15 = _GDIPlus_PenCreate (0xFFFF00DC);Rosa
    $hPen16 = _GDIPlus_PenCreate (0xFFFF006E);BlauRot

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

    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen1)

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

    Func death()
    _GDIPlus_PenDispose($hPen1)
    _GDIPlus_PenDispose($hPen2)
    _GDIPlus_PenDispose($hPen3)
    _GDIPlus_PenDispose($hPen4)
    _GDIPlus_PenDispose($hPen5)
    _GDIPlus_PenDispose($hPen6)
    _GDIPlus_PenDispose($hPen7)
    _GDIPlus_PenDispose($hPen8)
    _GDIPlus_PenDispose($hPen9)
    _GDIPlus_PenDispose($hPen10)
    _GDIPlus_PenDispose($hPen11)
    _GDIPlus_PenDispose($hPen12)
    _GDIPlus_PenDispose($hPen13)
    _GDIPlus_PenDispose($hPen14)
    _GDIPlus_PenDispose($hPen15)
    _GDIPlus_PenDispose($hPen16)
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

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

    While 1
    Sleep(100)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
    WEnd
    Func load()
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen1)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen2)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen3)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen4)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen5)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen6)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen7)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen8)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen9)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen10)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen11)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen12)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen13)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen14)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen15)
    Sleep(50)
    _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, 50, 50,$hPen16)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von bbm1995 (26. Juni 2010 um 23:21)

  • mit

    [autoit]

    _GDIPlus_GraphicsFillRect()

    [/autoit]

    kannste die rechtecke füllen
    für die brauchste dan aba keine pens sondern brushes

    und das

    [autoit]

    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

    [/autoit]

    muss nich in die schleife

  • Und die Farbe für _GDIPlus_GraphicsFillRect() machste mit

    [autoit]


    $hBrush=_GDIPlus_BrushCreateSolid()
    ;Und dispost mit:
    _GDIPlus_BrushDispose($hBrush)

    [/autoit]
  • danke, ihr habt mir sehr geholfen ^^
    ich fange jetzt an, GDI+ zu lernen. es sieht viel einfacher aus, wenn man damit anfängt :D

  • Hi, habe für die Paletten meines Apfelmännchens eine Funktion geschrieben, welche die jeweiligen Zwischenfarben im Farbverlauf berechnet.
    Im Array stehen die Farben, die Funktion gibt je nach Größe des Farbverlaufs die passende Zwischenfarbe aus.

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <Color.au3>

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

    Opt("GUIOnEventMode", 1)
    Dim $hcol[16]
    ;-----------------------------------------------
    $hGUI = GUICreate("Form1", 169, 600, 557, 78)
    GUISetOnEvent(-3, "death")
    ;---------
    $Button1 = GUICtrlCreateButton("LOS", 88, 8, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent($Button1, "load")
    ;---------
    GUISetState(@SW_SHOW)
    ;-----------------------------------------------
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

    ;Palette für den Farbverlauf RRGGBB
    ;
    $hcol[0] = (0x000000);Schwarz
    $hcol[1] = (0x404040);Grau
    $hcol[2] = (0xFF0000);Rot
    $hcol[3] = (0xFF6A00);Orange
    $hcol[4] = (0xFFD800);Gelb
    $hcol[5] = (0xB6FF00);Gelbgrün
    $hcol[6] = (0x4CFF00);Grün
    $hcol[7] = (0x00FF21);Grün2
    $hcol[8] = (0x00FF90);GrünBlau
    $hcol[9] = (0x00FFFF);HellBlau
    $hcol[10] = (0x0094FF);Blau
    $hcol[11] = (0x0026FF);DunkelBlau
    $hcol[12] = (0x4800FF);Violett
    $hcol[13] = (0xB200FF);Pink
    $hcol[14] = (0xFF00DC);Rosa
    $hcol[15] = (0xFF006E);BlauRot

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

    ;_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;hier suboptimal.....

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

    While 1
    Sleep(100)
    WEnd

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

    Func death()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>death

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

    Func load()
    $max = 500 ;beliebig
    For $i = 0 To $max
    $col = _createcolorfrompalette($hcol, $i, $max)
    $brush = _GDIPlus_BrushCreateSolid($col+0xFF000000)
    _GDIPlus_GraphicsFillRect($hGraphic, 1, $i, 50, 1, $brush)
    _GDIPlus_BrushDispose($brush)
    Next
    EndFunc ;==>load

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

    Func _createcolorfrompalette(ByRef $aPalette, $count, $maximum) ;gibt zwischenfarbe anhand der beiden Nachbarn im Palette-array zurück
    Local $ubound = UBound($aPalette) - 1 ;maximale Anzahl Palettenfarben
    Local $percent = $count * $ubound / $maximum ;Position innerhalb des Palettenarrays
    $index = Int($percent) ;index des Palettenarrays "unterhalb" von percent
    If $percent = $index Then Return $aPalette[$index] ;bei genauem indextreffer farbe zurückgeben

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

    $startrot = _ColorGetRed($aPalette[$index]) ;startfarbe
    $startgruen = _ColorGetGreen($aPalette[$index])
    $startblau = _ColorGetBlue($aPalette[$index])
    $endrot = _ColorGetRed($aPalette[$index + 1]) ;endfarbe
    $endgruen = _ColorGetGreen($aPalette[$index + 1])
    $endblau = _ColorGetBlue($aPalette[$index + 1])

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

    $xx = (($percent - $index)) ;faktor zwischen 0 und 1

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

    $r = Int($startrot - ($startrot - $endrot) * $xx) * 256 * 256 ;zwischenrot
    $g = Int($startgruen - ($startgruen - $endgruen) * $xx) * 256 ;zwischengruen
    $b = Int($startblau - ($startblau - $endblau) * $xx) ;zwischenblau
    Return $r + $g + $b
    EndFunc ;==>_createcolorfrompalette

    [/autoit]


    So kann man dann einfach eine Farbpalette erstellen.

  • [autoit]

    $col+0xFF000000

    [/autoit]

    kann man farben auch multiplizieren?

    Was jetzt, addieren, oder multiplizieren, oder beides?