ESP8266でPNGデコーダを実装してみた

esp826613.jpg

前回、「ESP8266でオンメモリでPNGをデコードするのは難しいかも」と書きましたが、あれこれ考えた結果、ぎりぎり何とかなりそうな見通しが立ったので、この3連休を使って実装してみました。

Deflate圧縮の伸張には、前回紹介した中から「tiny inflate」を選びました。

jibsen / tinf — Bitbucket

PNGファイル自体の扱いは、主に以下を参考にしながら自力で書きました。

apankrat/lpng
PNG画像を自力で読む
Portable Network Graphics (PNG) Specification (Second Edition)

懸念点だったメモリについては、グローバルメモリに32KBのリングバッファと、スキャンライン2本分のバッファを用意しました。
前者はLZ77圧縮の復号、後者は復号後のフィルター処理にどうしても必要となりますが、これだけで

グローバル変数が 72,814バイト (88%) の 動的メモリを使用しており、ローカル変数に 9,106 バイトが残っています。最高は 81,920バイトです

という状態になっており、かなり苦しい感じです。

描画速度もGIFより遅いので、フルカラーが使えるという以外にはあまりメリットは無いかもしれません。

コメント

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny

タイトルとURLをコピーしました