TFT_eSprite を Windows Bitmap 形式へ変換し Base64 エンコードするライブラリ(SpriteToBmp)
SpriteToBmp は M5StickC で作っている心拍計のスクリーンショット画像(TFT_eSprite のフレームバッファ)をエンコードする部分をライブラリ化したものです(スクリーンショットを作成する機能は含まれていません)。
上記以外の使いどころがあるかというと難しいのですが、「M5StickC で作成した画像を pio device monitor 経由でお手軽に送信したい」みたいな用途があれば利用できるかもしれません。
exmaples
付属しているサンプル(serial_write.cpp)はエンコードされた画像をシリアルで送信するものです。PC での操作もあるので少しだけ解説など。
ソースコード
画像以外のデータと区別するために、各行にプレフィックスを付けています(ちょっと無駄かもという罪悪感はあります。。。)
void writeRec(const char *s)
{
Serial.printf("==== BMP:%s\n", s);
}
任意のタイミングで複数回送信できるように、画像の終端でデリミタを送信しています。
SpriteToBmp::toBmpBase64(sp, [](uint8_t *b, size_t s) {
if (b != NULL)
{
writeRec((const char *)b);
}
else
{
writeRec("---- cut ----");
}
});
PC 側での操作
pio device monitor
で base64 データを受信し、各ツールで切り出しとデコードをした後に convert
(ImageMagick) で .png
形式に保存しています。
$ pio device monitor -b 115200 | grep -e "==== BMP:" | sed -e "s/==== BMP://" | awk '/[a-zA-Z0-9+\/=]/{ decode ="base64 -i -d | convert bmp:- example" NR ".png "; print $0 | decode ; close(decode) }' RS="---- cut ----"
.png
ファイルは順次保存されていきますが、バッファリングの関係か直近のデータはモニターを停止してフラッシュしないと保存されません。よって、最後に Ctrl-C
で停止してもらっています。
- Quit monitor when
Ctrl-C
displayed on M5Stick-C
モニターを停止すると以下の3画像が保存されます。