2024-01 << 2024-02 >> 2024-03

2024-02-27 (火)

気づいたらGIFのデコーダをC++で実装していた。。。

昨日の続き。

サーバで生成したビットマップ画像をESP32でダウンロードして電子ペーパーに書き込んだりしたのだけど、サイズが大きいし、かといってPNGはメモリが少ないと扱いにくいので、GIFを使うことに。

GIFの構造上は、ネットワーク越しに読み込みながらディスプレイに書き込めば、入力データもデコード済みのピクセルデータもメモリ上に置かなくて良いはず。

パレットの情報とLZWの辞書だけメモリ上に持つ省メモリなGIFデコーダを探したけど、意外と良いのが無い。。

http://www.technoblogy.com/show?45YI

これが一番良さそうに見えたのだけど、GitHubのリポジトリのコード見るとあまりちゃんと動かなそう。

とりあえず自分で書いてみて、どんなサイズのGIFでも16kB+αのメモリがあれば動きそうになった。実装も120行くらい。ピクセルの書き込み順を入れ替えて良ければさらに減るけど、悩ましい。

実装してて思い出したけど、20年くらい前にもJavaでGIFファイルのパーサ書いてるな。。。docomoのガラケーのAPIが画像以外のファイル操作を頑なに受け付けないので、仕方なくGIFのコメントブロック内にファイルシステム作っていた思い出。

追記:リポジトリ https://github.com/binzume/gif-decoder

2024-01 << 2024-02 >> 2024-03