Paint.DE - Ein kleiner Ansatz

  • So, ich will mal eben meinen Bildbearbeiter zeigen: Paint.DE^^

    Paint.DE Source
    [autoit]


    GUICreate("Paint.DE", 210, 210 + 20)
    $Color = GUICtrlCreateInput("0x000000", 0, 210, 210, 20)

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

    HotKeySet("^s", "_Save")
    HotKeySet("^o", "_Open")

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

    Dim $Pixel[21][21]
    Dim $Colors[21][21]
    Dim $PixelColor[445]

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

    GUISetState()
    For $x = 0 To 20
    For $y = 0 To 20
    $Pixel[$x][$y] = GUICtrlCreateLabel("", $x * 10, $y * 10, 10, 10)
    ConsoleWrite($Pixel[$x][$y] & @CRLF)
    GUICtrlSetBkColor(-1, 0xffffff)
    $PixelColor[(($x * 20) + $y) + 4] = "0xffffff"
    Next
    Next

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg <= $Pixel[20][20] And $msg >= $Pixel[0][0]
    GUICtrlSetBkColor($msg, GUICtrlRead($Color))
    $PixelColor[$msg] = GUICtrlRead($Color)
    Case $msg = -3
    Exit
    EndSelect
    WEnd

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

    Func _Save()
    Local $File = InputBox("Paint.DE", "Dateiname (Relativ zum aktuellen Ordner)")
    For $x = 0 To 20
    For $y = 0 To 20
    IniWrite($File, $x, $y, $PixelColor[(($x * 20) + $y) + 4])
    Next
    Next
    MsgBox(0, "Paint.DE", "Datei wurde gespeichert!")
    EndFunc ;==>_Save

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

    Func _Open()
    $File = InputBox("Paint.DE", "Dateiname (Relativ zum aktuellen Ordner)")
    If FileExists($File) Then
    For $x = 0 To 20
    For $y = 0 To 20
    $ReadColor = IniRead($File, $x, $y, 0xffffff)
    GUICtrlSetBkColor($Pixel[$x][$y], $ReadColor)
    $PixelColor[(($x * 20) + $y) + 4] = $ReadColor
    Next
    Next
    EndIf
    EndFunc ;==>_Open

    [/autoit]


    Die Steuerung ist einfach:
    - Strg + O => Datei öffnen
    - Strg + S => Datei speichern

    In das Input-Feld wird der Hex-Wert der Farbe eingetragen, der Rest ist, denke ich, selbsterklärend.

    Wie gesagt, das ist nur ein Ansatz und mal eben schnell hingekritzelt (Was man am Code, am Design & an der Funktionalität sieht) ;)
    Dafür wurden nur Grundfunktionen von AutoIt verwendet! ^^

    lg chess

    Beispiel: Smilie

    EDIT²:
    Siehe Edit von Post #5^^

  • Also bei mir funktioniert das Speichern und Laden.
    Das Script gefällt mir sehr gut, es ist extrem kurz gehalten, ich hätte eigendlich was wesentlich längeres erwartet. Toll! :thumbup:


    Wenn du es noch ausbauen willst: Eine Möglichkeit zur Wahl der Pixelanzahl wäre praktisch.

  • Bei mir hats ja bis vorhin auch noch geklappt, und ich hab eigentlich nichts am Code verändert, außer grobe Schönheitsfehler korrigieren...
    Naja, schön dass es dir gefällt!^^
    Und ich wollte mal was kurzes, aber von der Wirkung her größeres machen. ;)
    Ja, variable Größe wäre echt ganz nützlich, wenn ich morgen Zeit hab, bau ich das eben um.
    Danke für das Feedback!

    lg chess

  • Ich hatte auchmal die Idee für mein RPG ein neues Mapsystem zu entwickeln und da hatte ich die Idee das inetwa so zu machen:

    Code
    1=0x00FF00,0x00FF00,0xFFFF00
    2=...
    3=...


    also pro Reihe ein "Key" ( ähnlich inidateíen ).

    Ist dann net so lang die Datei und man hat nur eine Sektion.

    mfg
    Hauke

  • Hm, muss ich mal gucken, erstmal den Fehler im "alten" Dateiformat beheben;)
    Aufjedenfall liegt der Fehler DOCH beim Speichervorgang, nicht beim Laden.

    lg chess

    Edit:
    Ich versteh einfach nicht, warum das nicht klappt...:(
    Vielleicht hab ich ja auch einfach nur einen simplen Logikfehler oder so...
    Kann da vielleicht mal einer von den Erfahreneren drüber gucken? Also über die Func _Save() ?

    Danke & lg chess

  • Ich habs mal getestet und finde es bis jetzt agnz gut.

    Ich würde es mal mit einem 2 Dimensionalen Array versuchen, also so:

    [autoit]

    $Array[$i][$ii]

    [/autoit]


    $i = wagerechtes Feld
    $ii = senkrechtes Feld
    Sprich du hast statt der direkten Position Felder ( hier wären es halt 20*20 ).
    Ich hoffe du verstehst das so ungefähr

    So funktionierts:

    Spoiler anzeigen
    [autoit]

    GUICreate("Paint.DE", 210, 210 + 20)
    $Color = GUICtrlCreateInput("0x000000", 0, 210, 210, 20)

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

    HotKeySet("^s", "_Save")
    HotKeySet("^o", "_Open")

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

    Dim $Pixel[21][21]
    Dim $Colors[21][21]
    Dim $PixelColor[21][21]

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

    GUISetState()
    For $x = 0 To 20
    For $y = 0 To 20
    $Pixel[$x][$y] = GUICtrlCreateLabel("", $x * 10, $y * 10, 10, 10)
    GUICtrlSetBkColor(-1, 0xffffff)
    $PixelColor[$x][$y] = "0xffffff"
    Next
    Next

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg <= $Pixel[20][20] And $msg >= $Pixel[0][0]
    GUICtrlSetBkColor($msg, GUICtrlRead($Color))
    For $x = 0 To 20
    For $y = 0 To 20
    if $msg = $Pixel[$y][$x] Then
    $PixelColor[$x][$y] = GUICtrlRead($Color)
    ExitLoop
    EndIf
    Next
    Next
    Case $msg = -3
    Exit
    EndSelect
    WEnd

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

    Func _Save()
    Local $File = InputBox("Paint.DE", "Dateiname (Relativ zum aktuellen Ordner)")
    For $x = 0 To 20
    For $y = 0 To 20
    IniWrite($File, $x, $y, $PixelColor[$y][$x])
    Next
    Next
    MsgBox(0, "Paint.DE", "Datei wurde gespeichert!")
    EndFunc ;==>_Save

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

    Func _Open()
    $File = InputBox("Paint.DE", "Dateiname (Relativ zum aktuellen Ordner)")
    If FileExists($File) Then
    For $x = 0 To 20
    For $y = 0 To 20
    $ReadColor = IniRead($File, $x, $y, 0xffffff)
    GUICtrlSetBkColor($Pixel[$x][$y], $ReadColor)
    $PixelColor[$x][$y] = $ReadColor
    Next
    Next
    EndIf
    EndFunc ;==>_Open

    [/autoit]

    mfg
    Hauke

  • Puh, Hauke, an ein Array hatte ich auch schon gedacht, ich wusste nur nich wie ich das in der Hauptschleife festlegen soll, auf sowas einfaches wie eine If-Abfrage bin ich garnicht gekommen^^ Vielen Dank!

    Und Teare...
    Zumindest _ChooseColor benötigt die Misc.au3, und nur wegen einer "Spielerei" wollte ich mir nicht den Effekt kaputtmachen, keine Includes zu benutzen.
    Und zweitens sollte das Script ja "spartanisch" sein^^
    Aber ja, wenn ich da weiter dran rumbastel, aufjedenfall.

    lg chess

  • Nur ich befürchte, dass es mit einem 20x30 Bild ( also kien Quadrat ) nicht gehen wird, weil ich halt in dem Array die x und y Variablen vertauscht habe. Musst das einfach andesrum speichern:
    Y als Sektion und
    X als Key

    Spoiler anzeigen
    [autoit]

    GUICreate("Paint.DE", 210, 210 + 20)
    $Color = GUICtrlCreateInput("0x000000", 0, 210, 210, 20)

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

    HotKeySet("^s", "_Save")
    HotKeySet("^o", "_Open")

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

    Dim $Pixel[21][21]
    Dim $Colors[21][21]
    Dim $PixelColor[21][21]

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

    GUISetState()
    For $x = 0 To 20
    For $y = 0 To 20
    $Pixel[$x][$y] = GUICtrlCreateLabel("", $x * 10, $y * 10, 10, 10)
    GUICtrlSetBkColor(-1, 0xffffff)
    $PixelColor[$x][$y] = "0xffffff"
    Next
    Next

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg <= $Pixel[20][20] And $msg >= $Pixel[0][0]
    GUICtrlSetBkColor($msg, GUICtrlRead($Color))
    For $x = 0 To 20
    For $y = 0 To 20
    if $msg = $Pixel[$y][$x] Then
    $PixelColor[$x][$y] = GUICtrlRead($Color)
    ExitLoop
    EndIf
    Next
    Next
    Case $msg = -3
    Exit
    EndSelect
    WEnd

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

    Func _Save()
    Local $File = InputBox("Paint.DE", "Dateiname (Relativ zum aktuellen Ordner)")
    For $x = 0 To 20
    For $y = 0 To 20
    IniWrite($File, $y, $x, $PixelColor[$x][$y]) ; x unf y getauscht
    ;IniWrite($File, $x, $y, $PixelColor[$x][$y]) ; alt
    Next
    Next
    MsgBox(0, "Paint.DE", "Datei wurde gespeichert!")
    EndFunc ;==>_Save

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

    Func _Open()
    $File = InputBox("Paint.DE", "Dateiname (Relativ zum aktuellen Ordner)")
    If FileExists($File) Then
    For $x = 0 To 20
    For $y = 0 To 20
    $ReadColor = IniRead($File, $x, $y, 0xffffff)
    GUICtrlSetBkColor($Pixel[$x][$y], $ReadColor)
    $PixelColor[$x][$y] = $ReadColor
    Next
    Next
    EndIf
    EndFunc ;==>_Open

    [/autoit]


    Siehe Zeile 42/43

    mfg
    Hauke