kann ich eine JPG oder PNG im Framebuffer anzeigen (/ dev / fb *)?

16

Ich weiß, dass ich den Framebuffer unter Linux mit etwas wie erfassen kann cp /dev/fb0 ~/myimage und zeigen Sie dies erneut an, indem Sie auf das Gerät zurückkopieren cp ~/myimage /dev/fb0. In welchem ​​Format sind die Framebuffer-Bilddaten? und wie würde ich vorgehen, um ein vorgefertigtes Bild (jpg, png) im Framebuffer anzuzeigen? Kann ich mit imagemagick in dieses Format konvertieren?

p.s. Ich benutze einen Himbeer-Pi mit Himbeer.



Update 12.11.2012

Am Ende habe ich verwendet Pygame um Bilder in meiner Anwendung anzuzeigen. Ich bin mir nicht sicher, ob der Framebuffer für die Anzeige der Bilder verwendet wird. Aber es entspricht ganz gut meinen Bedürfnissen.

ndmweb
quelle

Antworten:

6

Hast du es versucht Fbida ?

fbida enthält fbi, ein Bildbetrachter für den Framebuffer.

Link zu fbi Manpage - http://manpages.ubuntu.com/manpages/lucid/man1/fbi.1.html

P.S - Ich bin nicht sicher, ob es in Raspbian funktionieren wird.

VenkatH
quelle
Leider scheint es nicht möglich zu sein, dass 'fbi' am unteren Bildschirmrand eine Statusleiste anzeigt. Dies ist ein bisschen ein Showstopper für verschiedene Anwendungen ...
Jules
3
@Jules Auf Debian 8 (Testing) gibt es eine -noverbose Option, mit der nur das Bild selbst angezeigt wird; dies ist jedoch nicht in der manpage dokumentiert, sondern steht nur in der "usage:" dafür.
Abbafei
Funktioniert es? Ich habe zuvor eine Kopie aus der Quelle auf der Webseite des Autors erstellt, und das hatte die Option, aber die Option schien in dieser Version überhaupt nichts zu bewirken.
Jules
@Jules -noverbose funktioniert bei mir mit fbi auf Raspbian, als ich es mit installiert habe apt-get install fbi.
D. Woods
2

In welchem ​​Format sind die Framebuffer-Bilddaten?

Die Dokumentation zum Linux-Kernel 4.2 https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45 sagt:

Pixel werden in hardwareabhängigen Formaten gespeichert. Anwendungen brauchen   sich des Pixel-Speicherformats bewusst sein, um Bilddaten in das zu schreiben   Frame-Pufferspeicher in dem von der Hardware erwarteten Format.

Formate werden durch Frame Buffer-Typen und Grafiken beschrieben. Einige Grafiken erfordern   zusätzliche Informationen, die in den variablen Bildschirminformationen gespeichert sind   bits_per_pixel, graustufen, rot, grün, blau und transp felder.

In Grafiken wird beschrieben, wie Farbinformationen codiert und zusammengesetzt werden, um sie zu erstellen   Makropixel. Typen beschreiben, wie Makropixel im Speicher gespeichert werden. Die folgenden Typen und Darstellungen werden unterstützt.

Es folgt eine Liste von Bildern und Typen, aber die Beschreibung reicht nicht aus, um die genauen Formate sofort zu verstehen.

Ciro Santilli 新疆改造中心 六四事件 法轮功
quelle
1
@Downvoters bitte erläutern, damit ich Informationen lernen und verbessern kann. Ich revanchiere mich nie. Vielen Dank.
Ciro Santilli 新疆改造中心 六四事件 法轮功
1

Wenn du möchtest cp /dev/fb0 ~/myimagesollte das Bild nur die Pixelinformationen enthalten und die Reihenfolge sollte stimmen ( RGB, BGR, RGBA, ARGB...)

Ich möchte das auch tun, aber ich habe kein passendes Werkzeug gefunden, also benutze ich Python, um das Image vorab zu erstellen. Du kannst es versuchen diese .

zqb-all
quelle
0

Wenn Sie sie installieren können, fbcat erstellt ein ppm-Bild und fbgrab erstellt ein PNG-Bild.

Yves Dorfsman
quelle
0

Schauen Sie sich /usr/include/linux/fb.h mit Strukturen wie fb_var_screeninfo an. Es kann eine Vielzahl von Farbtiefen und Formaten geben. Ich sehe 16 Bits / Pixel viel zu oft, momentan habe ich 32. Tippe fbset für sich und es werden die aktuellen Einstellungen angezeigt. Welches wird mit ziemlicher Sicherheit einer der Einträge in /etc/fb.modes sein.

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 funktioniert möglicherweise, wenn Sie es genau auf den gewünschten Modus abstimmen können. Ich würde wahrscheinlich etwas in C schreiben, ein Dutzend Zeilen, die libjpeg oder libpng aufrufen, können ein Bild in ein Speicherarray dekomprimieren. Ihre Bits / Farben usw. müssen übereinstimmen oder Sie müssen etwas schreiben, um es zu konvertieren. Gute Erfahrung.

Statt / writing / dev / fb0 als Datei zu lesen / schreiben, öffne () es, um einen Dateideskriptor zu erhalten, und dann mmap (), damit du mit einem Zeiger auf den Speicher arbeitest. Es ist viel schneller beim Übertragen, mindestens 10x.

Aber um Bilder auf den Bildschirm zu bringen, installiere ich einfach qiv. Drücken Sie dann die Taste F1, um Hilfe zu erhalten, aber ein x während der Anzeige eines Bilds schreibt es semipermanent in das Stammfenster, wenn Sie dies wünschen. Oder stellen Sie es einfach in den Desktop-Einstellungen als Hintergrundbild ein und es wird bei jedem Start angezeigt.

Alan Corey
quelle