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^^

    4 Mal editiert, zuletzt von chesstiger (10. Mai 2012 um 18:35)

  • 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

    Einmal editiert, zuletzt von chesstiger (9. Mai 2012 um 21:41)

  • 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

    Einmal editiert, zuletzt von chesstiger (10. Mai 2012 um 18:29)

  • 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