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

世間はすっかりクリスマス&スターウォーズに染まっていますね。
今週も週末は慌しく過ぎました。
今年は年末年始の休みも一週間しかなく、欲求不満が溜まりそうです。

今日は、PNGデコーダの実装に透過色を追加しました。

透過色は、「tRNS」チャンクで定義します。
中身は色ごとのアルファ値ですが、色の表現自体がカラーモードによって異なりますので、tRNSチャンクの中身もカラーモードによって異なります。
今回実装したのはインデックスカラーモードでの透過色だけです。
RGBモードでも、tRNSチャンクで色ごとにアルファ値を設定することができますが、まだ実装していません。

透過色の指定は圧縮・伸張とは関係が無く、描画時の処理がメインです。
デコーダライブラリではtRNSチャンクのデータの保持と参照を行います。
それを解釈して描画するのはデコーダライブラリを利用する側の仕事です。
今回はArduino上で描画する都合上、アルファ値の解釈は透明(0)・不透明(255)の2種類のみ行いました。

PNGに透過色を指定するツールとして、TweakPNGというツールを使いました。

【レビュー】PNG画像を解析して詳細なフォーマット情報を取得・表示するツール「TweakPNG」 – 窓の杜

このツールでPNGファイルを読み込み、tRNSチャンクを追加すると、透過色を指定することができます。

透過色ありPNGを表示させてみた様子が以下の動画です。
透過色対応させる場合は、高速なpushColorが使えませんので、少し遅くなりますが、透過色ピクセルを描画していないので見かけ上はそれほど遅くはなっていません。

この動画では、市松模様を表示してから、透過有りのPNGを表示させています。
市松模様を動画圧縮しているせいで、かなりひどい画質になっていますが・・・。

コメント