前回はとりあえずの練習としてM5Paperに挿したSDカードにある画像を表示させました。
画像が簡単に表示できて満足したんですが、もうちょっと練習してみます。
前回適当に用意した画像はサイズがバラバラでした。
練習なので挙動を知りたくてわざとサイズを変えたんですが、これらを同じ大きさで表示させたいと思います。
と言ってもライブラリ使うだけであいかわらず楽ちんですが。
ライブラリ
ESPシリーズでLCD表示するならなんと言っても最強の名をほしいままにしているLovyanGFX
ですよね!
M5StackのLCD関連のライブラリとして中身がLovyanGFXそのものであるM5GFX
というものがあります。
せっかくなので(?)、今回はM5GFXを使って練習してみたいと思います。
ビットマップファイルの描画
M5GFXのインスタンスのメソッドを直接呼んで描画する方法と、スプライトを描画しM5GFXへpushする2通りの方法があるようです。
それぞれの方法でビットマップファイルを描画してみました。
キレイに描画できました!
サイズを拡大縮小して描画
前項では540x540と270x270のビットマップを描画しました。
今度はそれぞれを400x400サイズになるように拡大縮小して描画します。
拡大縮小する際は元のサイズがわからないと期待通りにならないので、ビットマップのサイズを知りたくなります。
M5Canvasのサイズを指定する方法はcreate
だけでなくビットマップファイルからできるメソッドcreateFromBmpFile
があります。この方法だとビットマップのサイズに合わせてくれるのでちょうどいいですね。
このスプライトをpushSprite
ではなくpushRotateZoomWithAA
で回転拡大縮小して描画してあげればOKです。
M5Canvas::pushRotateZoomWithAA( 描画中心点x座標, 描画中心点y座標, 回転角, 幅の拡大率, 高さの拡大率);
同じサイズでキレイに描画できましたね!
ちなみに、実験してたら270x270サイズのビットマップを読み込むと必ずリブートして悩んで苦し紛れに現象をツイートしたんですが、M5GFXのMaintainerであるらびやんさんが捕捉してくれてライブラリを修正してくれました。どうもありがとうございます!
M5GFXで同じインスタンスを使い回してM5Canvas::createFromBmpFileを何度も叩くとCORRUPT HEAPでabortっちゃう。デストラクタでコールしてるdeleteSprite, deletePaletteしてみたり、setPsram(true)してみたりも変化なし。同じファイルを繰り返し開いてもabortしないのでメモリリークではなさそう?
— イナバ (@hollyhockberry) 2021年9月25日
ファイル選んで表示するやつ 作り替え
前回のポストで作成した ”SDカードに入っているファイルを選択して表示するやつ” をM5GFX使って同じサイズで表示するように作り替えてみました。
写真じゃさっぱりわからないですが、選択した270x270の画像が350x350サイズで表示されました。
例によってGithubにコードをあげています。