linux – フレームバッファ (/dev/fb*) に JPG や PNG を表示できますか?

framebuffer images linux raspberry-pi

Linuxでcp /dev/fb0 ~/myimageのようなものを使ってフレームバッファをキャプチャし、cp ~/myimage /dev/fb0のようにデバイスにコピーバックして再表示することができることは知っています。フレームバッファの画像データはどのような形式ですか? また、フレームバッファにあらかじめ作成された画像(jpg, png)を表示するにはどうすればいいですか?imagemagickでこの形式に変換できますか?

p.s. Imはraspbianを実行しているraspberry piを使用しています

11-12-2012を更新しました

私のアプリケーションで画像を表示するには、pygameを使うことにしました。これが画像を表示するためにフレームバッファを使用しているかどうかはわかりません。しかし、これは私のニーズをかなり満たしています

  20  None  2012-10-30


ベストアンサー

Fbidaを試してみましたか?

fbidaには、フレームバッファ用の画像ビューアであるfbiが含まれています

fbi man ページへのリンク – http://manpages.ubuntu.com/manpages/lucid/man1/fbi.1.html

P.S. – Raspbianで動作するかどうかはわかりません

8  VenkatH  2012-10-30


それはあなたを助けるかもしれない、詳細なマニュアルhttp://hacklab.cz/2012/04/22/usefulness-linux-framebuffer-virtual-console私はそれがLinux Framebufferについての1つの場所にすべてを持っていると思います

3  MichaelHefner  2012-12-18


フレームバッファの画像データはどのような形式になっていますか?

Linux カーネル 4.2 のドキュメント https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45 には、こう書かれています

ピクセルは、ハードウェアに依存するフォーマットでメモリに格納されます。アプリケーションは、ハードウェアによって期待されるフォーマットで画像データをフレームバッファメモリに書き込むために、ピクセルの保存フォーマットを意識する必要があります

フォーマットは、フレームバッファタイプとビジュアルによって記述されています。ビジュアルの中には追加情報を必要とするものがあり、それらは可変スクリーン情報 bits_per_pixel、グレースケール、赤、緑、青、トランスポートフィールドに格納されています

ビジュアルは、色情報がどのようにエンコードされ、マクロピクセルを作成するために組み立てられるかを説明します。タイプは、マクロピクセルがどのようにメモリに格納されるかを説明します。以下のタイプとビジュアルがサポートされています

ビジュアルと種類のリストが続くが、説明だけではすぐに正確なフォーマットを理解するには不十分だ

2  Ciro Santilli 郝海东冠状病六四事件法轮功  2015-10-29


これらをインストールできれば、fbcatでppmの画像を、fbgrabでpngの画像を作成することができます

2  Yves Dorfsman  2015-10-30


cp /dev/fb0 ~/myimageにしたい場合は、画像にはピクセル情報だけが含まれている必要があり、順序は正しいものでなければなりません(RGB, BGR, RGBA, ARGB…)

私もこれをやりたいのですが、適当なツールが見つからなかったので、pythonを使ってプリメイドの画像を作ってみました。あなたはthisを試してみてください

1  zqb-all  2016-11-28


/usr/include/linux/fb.h を見て、fb_var_screeninfo のような構造体を見てください。色の濃さやフォーマットはいろいろあります。私は16bit/pixelをよく見ますが、今は32bitにしています。fbset と単独で入力すると、現在の設定を表示してくれます。これはほぼ確実に /etc/fb.modes のエントリの一つになります

upstairs# fbset

mode "1920x1080"
geometry 1920 1080 1920 1080 32
timings 0 0 0 0 0 0 0
rgba 8/16,8/8,8/0,8/24
endmode

必要なモードに合わせて Imagemagick が使えるかもしれません。おそらくC言語で何かを書くでしょう。libjpegやlibpngを呼び出す十数行で、画像をメモリ配列に展開することができます。ビット数や色などを一致させるか、変換するために何か書く必要があります。良い経験です

また、/dev/fb0 をファイルとして読み書きするのではなく、open() でファイルディスクリプタを取得してから mmap() して、メモリへのポインタを使って作業するようにしてください。この方が転送速度ははるかに速く、少なくとも 10 倍にはなります

しかし、画面に画像を表示するためにはqivをインストールするだけです。その後F1を押すとヘルプが表示されますが、画像を表示している間にxを押すと、ルートウィンドウに半永久的に書き込まれます。また、デスクトップ環境設定で壁紙として設定しておけば、起動するたびに壁紙が表示されます

0  Alan Corey  2019-02-03


タイトルとURLをコピーしました