N Numbrush Laden

Wie Ausmal-Apps den Fortschritt speichern

Die naheliegende Antwort wäre, das Bild zu sichern. Die richtige ist, pro Fläche ein einziges Byte zu speichern und das Bild neu zu berechnen – was verändert, was Speichern kostet und was es übersteht.

Ein halb ausgemaltes Bild wegzulegen und Tage später an derselben Stelle weiterzumachen, wirkt selbstverständlich. Technisch ist es das nicht, und die Lösung, die dahintersteckt, ist deutlich sparsamer als das, was man zuerst vermuten würde.

Die naheliegende Vermutung lautet: Das Bild wird gespeichert. Genau das tun Ausmal-Apps in aller Regel nicht – und zwar aus guten Gründen, die sich an ein paar Zahlen ablesen lassen.

Die naheliegende Lösung und ihr Preis

Ein Bild in Bildschirmauflösung zu sichern heißt, mehrere Millionen Pixel abzulegen. Selbst komprimiert sind das je nach Motiv einige hundert Kilobyte bis mehrere Megabyte. Das ist an sich noch kein Drama, wird aber eines, sobald man an die Häufigkeit denkt: Sicher gespeichert ist ein Fortschritt nur dann, wenn nach jeder einzelnen gefüllten Fläche gespeichert wird.

Ein Bild besteht aus hunderten bis tausenden Flächen. Nach jedem Tippen ein Megabyte zu schreiben, würde die Speicherkarte des Geräts dauerhaft beschäftigen, spürbar Strom kosten und die Bedienung stocken lassen. Wer stattdessen seltener speichert, verliert bei einem abrupten Ende der Sitzung genau die Arbeit, an die man sich am besten erinnert – die letzten Minuten.

Dazu kommt ein zweites Problem, das erst später sichtbar wird. Ein gespeichertes Bild hat eine feste Auflösung. Auf einem neuen, größeren Display, in einem größeren Fenster oder nach einer überarbeiteten Darstellung passt es nicht mehr sauber und muss hochgerechnet werden, was bei harten Farbkanten hässlich aussieht.

Was tatsächlich gespeichert wird

Die Struktur eines solchen Bildes gibt die bessere Lösung vor. Jede Fläche hat eine Nummer – nicht die Farbnummer, sondern eine eigene, laufende Kennung – und jede Fläche ist entweder ungefüllt oder mit genau einem Palettenwert gefüllt. Mehr Zustände gibt es nicht. Es gibt kein halb gefüllt, keine Deckkraft, keinen Pinselstrich.

Damit lässt sich der gesamte Fortschritt als eine Liste ausdrücken: für Fläche eins der Wert null, für Fläche zwei der Wert sieben, für Fläche drei wieder null, und so weiter. Ein Wert pro Fläche, und weil eine Palette selten mehr als ein paar Dutzend Einträge hat, genügt dafür ein einzelnes Byte. Zweitausend Flächen ergeben zweitausend Byte – zwei Kilobyte für ein vollständiges Bild.

Das Bild selbst wird daraus jedes Mal neu erzeugt. Die Umrisse und die Zuordnung Pixel-zu-Fläche liegen ohnehin bereits vor, weil sie zum Motiv gehören; die gespeicherte Liste sagt beim Öffnen nur, welche Fläche welche Farbe bekommt. Das Bild ist also kein gespeicherter Gegenstand, sondern ein Ergebnis, das in Sekundenbruchteilen neu berechnet wird.

Was diese Bauart billig macht

Wovon der Fortschritt abhängig bleibt

Der Preis dieser Sparsamkeit ist eine Abhängigkeit. Die gespeicherte Liste ist für sich genommen bedeutungslos – sie ist nur eine Zahlenkolonne. Sinn bekommt sie erst zusammen mit genau der Vorlage, aus der sie stammt, und mit genau derselben Nummerierung der Flächen.

Praktisch heißt das: Solange das Motiv unverändert vorliegt, übersteht der Fortschritt Neustarts, App-Aktualisierungen und lange Pausen problemlos. Wird ein Motiv dagegen überarbeitet und dabei neu in Flächen zerlegt, passen die alten Nummern nicht mehr, und die Füllungen landen an falschen Stellen. Dieses Risiko wird üblicherweise dadurch entschärft, dass eine überarbeitete Vorlage als eigenes Motiv geführt wird statt als Ersatz.

Die zweite Abhängigkeit ist das Gerät. Eine solche Liste liegt zunächst im lokalen Speicher der Anwendung. Ob sie darüber hinaus irgendwo abgelegt wird, ist eine völlig getrennte Entscheidung, die mit der Speichertechnik nichts zu tun hat – und die Antwort fällt je nach Anwendung unterschiedlich aus.

Warum das fertige Bild trotzdem eine Bilddatei ist

Ein Widerspruch bleibt scheinbar bestehen: Wer ein fertiges Bild teilen oder in der Galerie ablegen will, bekommt am Ende doch eine Bilddatei. Das ist kein Rückschritt, sondern ein getrennter Schritt. Das Speichern des Fortschritts und das Erzeugen eines Bildes zum Herzeigen sind zwei verschiedene Vorgänge, und nur der zweite muss überhaupt Pixel produzieren.

Genau deshalb kann ein solches Exportbild größer sein als der Bildschirm, auf dem es entstanden ist. Berechnet wird es aus derselben Liste, nur eben einmalig und in beliebiger Auflösung. Der Fortschritt bleibt derweil das, was er die ganze Zeit war: ein paar Kilobyte Zahlen.

Häufige Fragen

Geht der Fortschritt verloren, wenn die App abstürzt?

In der Regel nicht mehr als die letzte gefüllte Fläche. Weil ein Speichervorgang nur wenige Kilobyte schreibt, kann nach jedem Tippen gespeichert werden, statt in größeren Abständen. Der Verlust bei einem Absturz ist dadurch auf den allerletzten Schritt begrenzt.

Warum belegen viele angefangene Bilder so wenig Speicher?

Weil nicht das Bild gespeichert wird, sondern eine Nummer pro Fläche. Ein Bild mit zweitausend Flächen braucht dafür in der Größenordnung von zwei Kilobyte, unabhängig davon, wie groß der Bildschirm ist. Der Platzbedarf hängt an der Zahl der Flächen, nicht an der Auflösung.

Liegt der Fortschritt auf einem Server?

Das ist eine getrennte Frage. Die Speichertechnik selbst braucht kein Netz: Sie legt eine kleine Datei lokal ab. Ob zusätzlich eine Kopie irgendwo anders liegt, ist eine bewusste Entscheidung der jeweiligen Anwendung, und sie fällt unterschiedlich aus.

Auf einer echten Fläche ausprobieren

Numbrush ist Malen nach Zahlen für Erwachsene: Mandalas, Rosettenfenster und geometrische Ornamentik, zwölf Farben pro Bild, eine Lupe für die engen Stellen und keinerlei Strafe für einen danebengesetzten Tipp. Kostenlos, offline, ohne Werbung und ohne Konto.

Im App Store laden

Verwandte Beiträge

Alle Beiträge