Kiste
EN

KistePix

Ein vollwertiger Pixel-Editor — Ebenen, Animation, eigene Paletten, GIF- und Sprite-Sheet-Export. Rund 5700 Zeilen Kiste in einer Datei, ohne fremde Bibliothek.

KistePix beim Malen

Kostenlos selber bauen

KistePix ist quelloffen. Lade den Quelltext, öffne ihn in der Kiste-IDE und bau dir dein eigenes KistePix — so einfach, das kann jeder. Es ist derselbe Code, aus dem auch die fertige Version entsteht.

Lieber ein fertiges Ein-Klick-Programm, ganz ohne selbst zu bauen? Das gibt es auf kistepix.com.

So gebaut

KistePix ist ein reines Kiste-Programm — eine einzige Datei mit rund 5700 Zeilen, ohne Spiel- oder Grafik-Engine. Es nutzt die eingebauten Module gui (Fenster, Leinwand, Bedienelemente), bild (Pixel-Puffer, PNG/GIF), datei, json und pfad (Speichern/Laden), bytes (Hex-Farben) und mathe.

Was drinsteckt

  • Ebenen mit Deckkraft und Reihenfolge, live übereinandergelegt
  • Animation mit Frames, Zeitleiste, Zwiebelschale und Dauer pro Frame
  • Eigene Paletten (bis 256 Farben) zum Laden und Speichern
  • Werkzeuge: Stift, Radierer, Füller, Linie, Rechteck, Kreis, Auswahl, Lasso, Pipette, Spiegeln & Symmetrie
  • Undo/Redo, Zoom & Verschieben, Transparenz-Schachbrett
  • Export als PNG, animiertes GIF und Sprite-Sheet (mit Aseprite-JSON, das Godot, Unity oder Phaser direkt lesen)
  • Zweisprachige Oberfläche (Deutsch/Englisch) und eigenes Hilfe-Fenster

Ebenen in einem Rutsch zeichnen

Statt Pixel für Pixel zu setzen, mischt KistePix alle sichtbaren Ebenen in einen flachen Speicherpuffer und schreibt diesen in einem Aufruf auf die Leinwand. Dadurch bleibt das Zeichnen auch bei großen Bildern flüssig.

// Alle Ebenen werden in EINEN flachen RGBA-Puffer gemischt und
// dann in einem einzigen Aufruf auf die Leinwand geschrieben —
// die Kosten hängen nicht mehr an der Leinwandgröße.
bild.setze_puffer(komposit_bild, komposit_puf)

Rückgängig, ohne Speicher zu fressen

Ein voller Bild-Schnappschuss pro Pinselstrich wäre viel zu teuer. KistePix merkt sich stattdessen nur die geänderten Pixel — Index und alten Wert — in einem Ringpuffer. Eine „Generations-Marke" verhindert, dass derselbe Pixel im selben Schritt doppelt landet.

funktion undo_erfasse(idx, alt) {
    wenn d_offen == falsch { gib }
    nimm mk = d_mark
    wenn mk[idx] == d_gen { gib }     // in diesem Schritt schon erfasst
    mk[idx] = d_gen
    // nur den Pixel-Index und seinen ALTEN Wert merken:
    ai[w] = idx
    av[w] = alt
    d_len = d_len + 1
}

Animation exportieren

Jeder Frame hat seine eigene Dauer. Beim Export wird daraus ein animiertes GIF mit passenden Verzögerungen — oder ein Sprite-Sheet samt JSON für Spiel-Engines.

funktion exportiere_gif(pfad, faktor) {
    nimm bilder = liste.gefüllt(länge(frames), 0)
    nimm dauern = liste.gefüllt(länge(frames), 0)   // je Frame eine Dauer
    für f = 0 bis länge(frames) - 1 {
        bilder[f] = frame_als_bild(f, faktor, 0)
        dauern[f] = frames[f].dauer div 10          // ms -> 1/100 s (GIF-Einheit)
    }
    bild.schreibe_gif_animiert_dauern(pfad, bilder, dauern)
}

Sprite-Sheets für Spiele-Engines

Für Spiele exportiert KistePix alle Frames als ein Sprite-Sheet — ein breites Bild mit allen Einzelbildern nebeneinander — und schreibt dazu automatisch eine Begleit-.json im Aseprite-Schema. Godot, Unity oder Phaser lesen sie direkt ein, samt der Dauer jedes Frames. So wird aus einer Animation in KistePix ohne Umwege ein fertiges Spiel-Asset.

funktion exportiere_blatt(pfad, faktor, transparent) {
    nimm n = länge(frames)
    nimm img = bild.neu(n * LEIN_B * faktor, LEIN_H * faktor)
    für f = 0 bis n - 1 {
        // jeden Frame nebeneinander ins Blatt malen …
    }
    bild.schreibe_png(img, pfad)
    // Begleit-JSON im Aseprite-Schema — Godot/Unity/Phaser lesen es direkt:
    datei.schreibe(mit_json(pfad), blatt_json_text(pfad, faktor))
}

KistePix zeigt, wie weit ein einzelnes Kiste-Programm trägt: ein komplettes Kreativwerkzeug, das es mit den üblichen Pixel-Editoren aufnimmt — offen zum Anschauen, Verändern und Selber-Bauen.