Icon generator

  • Hallo wollte mir einen random Icon Generator schreiben habe es so getestet aber kriege es nicht hin das ganze anzuspeichern die Lösung ist auch etwas blöd vlt hat jemand eine bessere Idee wie man das ganze umsetzen kann möglichst einfach da ich noch ziemlicher Anfänger bin :) da ganze ist ziemlich hingebastelt ist wird wenn es funktioniert noch entrümpelt und optimiert keine sorge
    Edit:was ich auch noch nicht ganz verstanden habe ist warum obwohl ich die Farbe random erzeuge meist grünlich ist eher selten rot oder blau ...

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <array.au3>
    $gui = GUICreate("gdiplus", 300,300)
    $string1 = ""
    Local $array1[0]

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

    while 1
    $1 = Random(1,300,1)
    $2 = Random(1,300,1)
    $3 = Random(1,300,1)
    $4 = Random(1,300,1)

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

    $5 = random(1,6,1)
    $6 = random(1,6,1)
    $7 = random(1,6,1)
    $8 = random(1,255,1)
    $9 = random(1,255,1)
    $10 = random(1,255,1)
    $string = ""
    $counter = 0
    do
    $5 = ""
    $5 = random(1,6,1)
    $counter = $counter +1
    if $5 = 1 then
    $string1 = "AA"
    EndIf
    if $5 = 2 then
    $string1 = "BB"
    EndIf

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

    if $5 = 3 then
    $string1 = "CC"
    EndIf

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

    if $5 = 4 then
    $string1 = "DD"
    EndIf
    if $5 = 5 then
    $string1 = "EE"
    EndIf
    if $5 = 6 then
    $string1 = "FF"
    EndIf

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

    _ArrayAdd($array1,$string1)

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

    $string2 = $string1 & $string1
    ;MsgBox(0,"",$5 & " string:" & $string2)

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

    Until $counter = 3
    ;$key = $array1[$

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

    ;_ArrayDisplay($array1, "daks")
    $key = "0x" & $array1[0] & $8 & $array1[1] & $9 & $array1[2] & $10
    ;$key = ClipGet()
    ;MsgBox(0,"",$key)
    _ArrayDelete($array1, 0)
    _ArrayDelete($array1, 1)
    _ArrayDelete($array1, 2)
    _ArrayDelete($array1, 3)
    _ArrayDelete($array1, 4)
    _ArrayDelete($array1, 5)
    _ArrayDelete($array1, 6)
    _ArrayDelete($array1, 7)
    _ArrayDelete($array1, 8)

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

    ;ClipPut($key)

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

    ;0xAA99AA9AA211
    GUISetState()
    _GDIPlus_Startup()
    $grafik = _GDIPlus_GraphicsCreateFromHWND($gui)
    _GDIPlus_GraphicsDrawLine($grafik,$1,$2,$3,$4, _GDIPlus_PenCreate($key,11))
    Sleep(19)
    _GDIPlus_GraphicsDrawEllipse($grafik,$1, $2,$3, $4)
    ;_GDIPlus_GraphicsDraw
    $bitmap = _GDIPlus_BitmapCreateFromHBITMAP($grafik)
    _GDIPlus_ImageSaveToFile($bitmap, @ScriptDir&"\Gespeichert.ico")
    WEnd

    [/autoit]

    2 Mal editiert, zuletzt von manske (2. Januar 2015 um 05:36)

  • Ich glaub das Problem liegt daran wie du deine zufallszahl für deine Farbe auswählst denn die "0xFFFFFFFF" sind nur hexadezimalzahlen Werte (0x => Hexadezimal). Im Dezimalen würden sie so aussehen 255x255x255x255.

    hir mit Knast du jeden Farbwert zufällig erzeugen lassen.

    [autoit]

    Random(0,255*255*255*255)
    Random(0,0xFFFFFFFF)

    [/autoit]

    da her kann man sich dass hier sparen:

    Spoiler anzeigen
    [autoit]

    $5 = random(1,6,1)
    $6 = random(1,6,1)
    $7 = random(1,6,1)
    $8 = random(1,255,1)
    $9 = random(1,255,1)
    $10 = random(1,255,1)
    $string = ""
    $counter = 0
    do
    $5 = ""
    $5 = random(1,6,1)
    $counter = $counter +1
    if $5 = 1 then
    $string1 = "AA"
    EndIf
    if $5 = 2 then
    $string1 = "BB"
    EndIf

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

    if $5 = 3 then
    $string1 = "CC"
    EndIf

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

    if $5 = 4 then
    $string1 = "DD"
    EndIf
    if $5 = 5 then
    $string1 = "EE"
    EndIf
    if $5 = 6 then
    $string1 = "FF"
    EndIf

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

    _ArrayAdd($array1,$string1)

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

    $string2 = $string1 & $string1
    ;MsgBox(0,"",$5 & " string:" & $string2)

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

    Until $counter = 3
    ;$key = $array1[$

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

    ;_ArrayDisplay($array1, "daks")
    $key = "0x" & $array1[0] & $8 & $array1[1] & $9 & $array1[2] & $10
    ;$key = ClipGet()
    ;MsgBox(0,"",$key)
    _ArrayDelete($array1, 0)
    _ArrayDelete($array1, 1)
    _ArrayDelete($array1, 2)
    _ArrayDelete($array1, 3)
    _ArrayDelete($array1, 4)
    _ArrayDelete($array1, 5)
    _ArrayDelete($array1, 6)
    _ArrayDelete($array1, 7)
    _ArrayDelete($array1, 8)

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

    Ach ja und bei GDI+ must du so ziemlich bei allem was du auf machst später wider schließen.

    Dann würde dann würde das Skript etwas so aussehen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

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

    $gui = GUICreate("gdiplus", 300,300) ;Erstellt ein GUI
    GUISetState(@SW_SHOW) ; Macht das GUI sichtbar
    _GDIPlus_Startup() ; Startet GDI+
    $grafik = _GDIPlus_GraphicsCreateFromHWND($gui) ;Öffnet eine Grafik
    $Pen = _GDIPlus_PenCreate(0xFF000000,1) ;Öffnet einen Pen

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

    While 1
    $1 = Random(0,300,1)
    $2 = Random(0,300,1)
    $3 = Random(0,300,1)
    $4 = Random(0,300,1)

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

    $Pen_Color = Random(0,255*255*255*255) ;Zufalls Farbe
    $Pen_Width = Random(1,10) ;Zufalls Größe

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

    _GDIPlus_PenSetColor($Pen,$Pen_Color) ;Gibt dem Pen eine neue Farbe
    _GDIPlus_PenSetWidth($Pen,$Pen_Width) ;Gibt dem Pen Eine neue Größe

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

    _GDIPlus_GraphicsDrawLine($grafik,$1,$2,$3,$4,$Pen)
    Sleep(50)

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

    If Guigetmsg() = $GUI_EVENT_CLOSE Then ; Abfrage ob das GUI einen schließ Befehl kommt
    _GDIPlus_GraphicsDispose($grafik) ; Schließt die Grafik
    _GDIPlus_PenDispose($Pen) ; Schließt den Pen
    _GDIPlus_Shutdown() ; Beendet GDI+
    Exit ; Beendet das Skript
    EndIf
    Wend

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Hi,

    die Lösung ist auch etwas blöd

    ist stark untertrieben^^

    Die Schleife erstellt pausenlos Dateien, wenn sie denn denn durchlaufen würde.
    Im Array sollen Elemente gelöscht werden, welche garnicht existieren, daher die Fehlermeldung.
    Arrays pausenlos zu erstellen und danach zu löschen ist murks! Wenn man vorher weiß, welche Dimension das Array haben soll, dann definiert man das EIN MAL am Anfang des Scripts!

    Das mit den vielen Randoms habe ich auch nicht verstanden.
    $key = 0x219BB182AA73 ist auch etwas seltsam, sollte wohl eine Farbe sein...

    Ich versuche mal, das etwas zusammenzufassen :o)

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>

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

    Opt("GUIOnEventMode", 1) ;OnEventmodus einschalten

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

    Global $gui = GUICreate("gdiplus", 300, 300) ;GUI erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $gui) ;Grafik speichern und beenden
    GUISetState() ;GUI anzeigen
    _GDIPlus_Startup() ;GDI starten

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

    Global $grafik = _GDIPlus_GraphicsCreateFromHWND($gui) ;Context erstellen
    Global $hImage = _GDIPlus_BitmapCreateFromGraphics(300, 300, $grafik)
    Global $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage);

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

    _GDIPlus_GraphicsClear($hGraphic, 0xFF00FFFF) ;Hintergrund
    $pen = _GDIPlus_PenCreate("0xFFF00FFF", 20) ;pen
    _GDIPlus_GraphicsDrawRect($hGraphic, 0, 0, 300, 300, $pen);linie

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

    While 1 ;Endlosschleife
    $x1 = Random(1, 300, 1) ;Random
    $y1 = Random(1, 300, 1)
    $x2 = Random(1, 300, 1)
    $y2 = Random(1, 300, 1)
    $key = "0xFF" & String(Random(1, 0xFFFFFF, 1));zufällige Farbe für den
    $pen = _GDIPlus_PenCreate($key, 11) ;pen
    _GDIPlus_GraphicsDrawLine($hGraphic, $x1, $y1, $x2, $y2, $pen);linie
    _GDIPlus_GraphicsDrawEllipse($hGraphic, $x1 / 2, $y1 / 2, $x2 / 2, $y2 / 2, $pen);Kreis
    _GDIPlus_GraphicsDrawImageRect($grafik, $hImage, 0, 0, 300, 300);Image in gui anzeigen
    Sleep(1000)
    WEnd

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

    Func _Exit()

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

    _GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\Gespeichert.jpg");speichern
    _GDIPlus_ImageDispose($hImage) ;löschen
    _GDIPlus_Shutdown() ;GDI beenden
    ShellExecute(@ScriptDir & "\Gespeichert.jpg");ICO anzeigen
    Exit ;ende
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Schon mal vielen dank für die Lösungen und die arbeit habe allerdings mit andy's Lösung immer noch das Problem das ganze als Icon(.ico) abzulegen so das ein funktionierendes Icon herauskommt das bloße umbenennen der Datei von .jpg auf .ico zerstört scheinbar die Datei bräuchte allerdings .ico :)

  • naja, ich dachte, anhand der AutoIt-Hilfe hättest du die Lösung selbst gefunden....

    [autoit]

    $hIcon = _GDIPlus_HICONCreateFromBitmap($hImage) ;icon aus bitmap
    _WinAPI_SaveHICONToFile("test.ico", $hIcon) ;speichern
    ShellExecute("test.ico")

    [/autoit]


    Wenn du nicht weisst wie man in der Hilfe sucht, wieso fragst du nicht?