
前回、「ESP8266でオンメモリでPNGをデコードするのは難しいかも」と書きましたが、あれこれ考えた結果、ぎりぎり何とかなりそうな見通しが立ったので、この3連休を使って実装してみました。
Deflate圧縮の伸張には、前回紹介した中から「tiny inflate」を選びました。
PNGファイル自体の扱いは、主に以下を参考にしながら自力で書きました。
apankrat/lpng
PNG画像を自力で読む
Portable Network Graphics (PNG) Specification (Second Edition)
懸念点だったメモリについては、グローバルメモリに32KBのリングバッファと、スキャンライン2本分のバッファを用意しました。
前者はLZ77圧縮の復号、後者は復号後のフィルター処理にどうしても必要となりますが、これだけで
グローバル変数が 72,814バイト (88%) の 動的メモリを使用しており、ローカル変数に 9,106 バイトが残っています。最高は 81,920バイトです
という状態になっており、かなり苦しい感じです。
描画速度もGIFより遅いので、フルカラーが使えるという以外にはあまりメリットは無いかもしれません。
コメント