軽快にさくさく動いて良いのですが、デスクトップ環境(X)がないのでスクリーンショットを撮るには一筋縄ではいきません。マニアックな、CUI環境でフレームバッファのデータからスクリーンショット(PNG画像)を作成する方法を紹介します。関連スクリーンショットを撮る(超簡単な方法)フレームバッファをrawデータとして保存する方法は簡単に見つかるのですが、そこから一般的な画像形式(pngとか)にする方法が見つからず、色々探す事小1時間。完璧な「raspi2png」を発見しました!githubからcloneしてきます。※初めての方はgitコマンドをインストール。https://github.com/AndrewFromMelbourne/raspi2png.git一応バイナリが入っているのですが、自分環境で作り直します。コンパイルにはlibpngが必要です。make完了したら、キャプチャしてみましょう。ss.pngこれで、あっさりとスクリーンショットが撮れました!どこからでも使えるようにパスが通る場所に設置しておきます。/usr/local/bin/raspi2png途中で行き詰まった方法ググるとたくさん出てくるフレームバッファを直接ファイルに保存する方法を試してみました。フレームバッファをraw画像ファイルに書き出します。ss.raw出来上がったファイルはRGBにAlphaを加えた32bitのデータになります。4byte)rawtoppmというコマンドで、raw画像をPPM形式に変換します。画面の縦横サイズが必要なので予めfbsetで調べておきます。endmodeコマンドが入っていない場合は、インストールします。netpbmPPM形式に変換します。ss.ppmそして、ppmをconvertコマンド(ImageMagick)でpngに変換します。convertコマンドが使えるようにimageMagickを入れておきます(最初だけ)。imagemagick変換します。ss.pngできあがったファイルをPCで開いて見ると、、、ぐちゃぐちゃ!rawtoppmが24bitデータ(RGB)にしか対応していないのが原因と思われます。見てみると、9216000となっています。4byteを計算すると、1920x1200x4(byte)=9216000ちょうどピッタリ。いうことで、4byte(BGRA)を3byte(RGB)に変換してからrawtoppm→convertとすれば良さそうです。→【フレームバッファのBGRAデータをRGBに変換する自作プログラム】データをppm形式に変換するところでつまずいたので、フレームバッファのrawデータであるBGRA(各8bitRGBカラーデータにαを加えた32bitのデータ)からRGBを抜き出してくるプログラムを作りました。変換プログラム(C言語編)実行スピードを考慮して、C言語で作りました。フレームバッファ(画面サイズ)を小さくしてデータ量を少なくしています(方法は最後に記載)。例外処理を入れ始めるととても長くなるので、全部決め打ちしています。ファイル名やサイズを後から指定する場合は、引数として与えて参照するように修正すると良いです。0;}※最初に定義しているバッファサイズはfbsetで確認した値を使います。8/16,8/8,8/0,8/24endmode入力用には×4、出力用には×3しています。※ファイルサイズを取得して動的にやれば良いのですが、手抜き、もとい、要点だけを分かり易くするために最小限にしています。argb2rgb.cあとは、同じフォルダにss.rawデータを置いて実行すればOKです。(詳細は変換手順にて)変換プログラム(Python編)Python3でも変換するコードを書いてみました。ファイルに書き出して完了C言語より恐ろしくシンプル。実行権限を付けておきます。(バイナリファイル入出力)変換手順フレームバッファをrawデータとして保存します。ss.raw変換プログラムを実行します。ss.datpythonの場合は引数に入力ファイルと出力ファイルを指定します。※注)ラズパイzeroだとかなり時間がかかります。出来上がったss.datをppm形式に変換します。ss.ppmpng形式に変換します。当初Pythonでやっていたのですが、あまりにも変換に時間がかかったのでCで書き直しました。Wで比較してみました。0m0.110s次にコンパイル済みのCで実行。いうことで、200倍の差が付きました^^;おまけ(フレームバッファのサイズを変更)接続しているディスプレイによっては解像度が高すぎて、スクリーンショットが大きくなってしまいます(文字が小さい!)config.txtを編集して適度なサイズに変更することで対応します。config.txtフレームバッファの縦横サイズのコメントアウトを消します。framebuffer_height=720保存して終了し、再起動後に無事に表示されたら完了です。参考RaspberryPi3でHDMI出力の解像度を変更する方法まとめラズパイのCUI環境でスクリーンショットを撮る方法を紹介しました。世の中には便利な物を公開してくださる方がおられ、ありがたい限りです^^また、自作プログラムで変換する方法も開拓できました。画像処理の初歩的な理解にも役立ちそうです。it0LinkedIn-Pocket4Copy-ラズパイカメラを使って連続撮影&fbiコマンドでCUI画面のフレームバッファに直接表示する方法。最近なにかと話題の音声アシスタント技術。自宅のIoT化実験用の情報端末が欲しい〜。コメントをキャンセルメールアドレスが公開されることはありません。コメント名前メールアドレスウェブサイトこのフォームを使用することにより、このウェブサイトによるデータの保管および取り扱いに同意するものとします。5+1選!【運用編を追加】まーくお問い合わせやってみてわからなかったことなど技術的な質問は、各記事の一番下にコメント欄(ディスカッション)がありますのでそちらにお願いします。その他はtwitter(@iot_plus_net)にどうぞ。