N Numbrush 入手する

塗りかけの絵はどう保存されているのか

素直な答えは「絵を保存する」です。正しい答えは「領域ごとに1バイトだけ保存して、絵は描き直す」で、この違いが保存の費用と、その保存が何に耐えるかを決めます。

塗りかけの絵を保存する素直なやり方は、その絵を保存することです。この方法は、ほとんどどの点から見ても良くありません。

素直なやり方の何が悪いのか

素直なやり方は、いまの画面をビットマップに書き出して保存し、次に開くときに読み戻す、というものです。問題は遅さではなく、このビットマップが情報を落としていることです。

ビットマップは各画素の最終的な色しか持ちません。どこが自分で塗った部分でどこが元の線画なのか分かりませんし、ある灰色が「3番で塗った結果」なのか「まだ塗っていない下地」なのかも区別できません。だから取り消しも、進捗の集計も、配色を変えて塗り直すこともできなくなります。情報は描画の時点で潰れています。

二つ目は大きさです。高解像度のビットマップは数メガバイトになり、しかも一手ごとに書き直すことになります。三つ目はもっと面倒で、このビットマップは古びます。線画そのものに小さな修正が入れば、古い保存だけが昔のままで、両者が食い違います。

本当に保存すべきものは非常に小さい

見方を変えます。塗りかけの絵の状態とは、結局「各領域がいまどうなっているか」です。領域は有限で、ふつう数百から数千。各領域の状態も「空」か「何番で塗った」かだけです。

Numbrush では、領域ごとに 1 バイトが持たれています。このバイトが表すのは透明度ではなく状態——塗り済み、未塗り、強調表示中——です。1 バイトあれば 256 通りを表せるので、領域の状態を持つには十分すぎます。二千領域なら丸ごとで二千バイト、サムネイルより小さい計算です。

小ささはついでの利点にすぎません。本当の利点は、このデータが情報を落としていないことです。どこを塗ったか、何番で塗ったかを保持しているので、取り消しも、進捗率も、配色変更後の再描画も、跨デバイスの復元も、すべて同じ一つのデータから計算できます。

再開のときに何が起きているか

塗りかけの絵を開くとき、アプリがしているのは、線画を読み、その数キロバイトの状態表を読み、表に従って該当領域を塗り直すことです。初めて開いたときと同じ手順で、初期状態が全部空でないだけです。

この作りには目立たない性質がひとつあります。元の絵は一度も書き込まれません。進捗は独立した小さなファイルで、絵のほうは常に読み取り専用です。つまり進捗が壊れても失うのはその一枚の塗りの記録だけで、絵そのものは汚れません。同じ絵に対して互いに干渉しない複数の進捗を持つこともできます。

マス目を一つ塗ったときに書き換わるのもこの 1 バイトだけで、絵全体が読み直されることはありません。密な図柄でも、古い端末でも、色が即座に乗るのはこのためです。

よくある質問

端末を替えたら進捗は残りますか

その進捗がどこにあるか次第です。端末の中にあるものは端末について行き、アカウントに同期されているものはアカウントについて行きます。前者はアカウントも通信も要らず、後者は乗り換えが楽です。どちらが良いという話ではなく、取るものと引き換えに手放すものが違うだけです。

再開がやけに遅いアプリがあるのはなぜですか

開くたびに画像処理をやり直している可能性が高いです。領域分割や番号の計算を毎回やれば遅いのは当然で、一度計算して保存してしまえば以後は一瞬で済みます。

塗りかけをたくさん残すと容量を食いますか

この持ち方なら食いません。一枚あたり数百バイトから数キロバイトで、数百枚でも数メガバイトです。容量を占めるのはいつでも絵のほうで、進捗ではありません。

実際のキャンバスで試す

Numbrush は大人のための数字ぬりえです。曼荼羅、バラ窓、幾何学模様。1枚につき12色、狭いところには拡大鏡、押し間違えても失うものはありません。無料、オフライン、広告なし、アカウントなし。

App Store でダウンロード

関連記事

ガイド一覧