puis-je afficher un JPG ou PNG dans le tampon d'images (/ dev / fb *)?

19

Je sais que je peux capturer le framebuffer sous linux en utilisant quelque chose comme cp /dev/fb0 ~/myimageet le réafficher en copiant sur l'appareil comme ça cp ~/myimage /dev/fb0. Dans quel format les données d'image du tampon d'image sont-elles? et comment pourrais-je afficher une image prédéfinie (jpg, png) sur le framebuffer? Puis-je convertir dans ce format en utilisant imagemagick?

ps Im utilisant un raspberry pi exécutant raspbian.



Mise à jour 11-12-2012

J'ai fini par utiliser pygame pour afficher des images dans mon application. Je ne sais pas si cela utilise le frame-buffer pour afficher les images. Mais cela répond assez bien à mes besoins.

ndmweb
la source

Réponses:

8

Avez-vous essayé Fbida ?

fbidacontient fbi, une visionneuse d'images pour le framebuffer.

Lien vers la fbipage de manuel - http://manpages.ubuntu.com/manpages/lucid/man1/fbi.1.html

PS - Je ne sais pas si cela fonctionnera en Raspbian.

VenkatH
la source
Malheureusement, il ne semble pas possible d'empêcher «fbi» d'afficher une barre d'état en bas de l'écran. C'est un peu un showstopper pour diverses applications ...
Jules
3
@Jules Sur Debian 8 (test), il y a une -noverboseoption qui permet d'afficher uniquement l'image elle-même; cependant, cela n'est pas documenté dans la page de manuel, mais seulement dans l '"utilisation:" pour le it.
Abbafei
Est-ce que ça marche? J'ai précédemment construit une copie à partir de la source sur la page Web de l'auteur, et qui avait l'option, mais l'option ne semblait pas vraiment faire quoi que ce soit dans cette version.
Jules
@Jules -noverbosefonctionne pour moi en utilisant fbisur raspbian lorsque je l'ai installé en utilisant apt-get install fbi.
D. Woods
2

Dans quel format les données d'image du tampon d'image sont-elles?

La documentation du noyau Linux 4.2 https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45 dit:

Les pixels sont stockés en mémoire dans des formats dépendants du matériel. Les applications doivent connaître le format de stockage des pixels afin d'écrire des données d'image dans la mémoire tampon de trame au format attendu par le matériel.

Les formats sont décrits par les types de tampons de trame et les visuels. Certains visuels nécessitent des informations supplémentaires, qui sont stockées dans les champs d'informations variables d'écran bits_per_pixel, niveaux de gris, rouge, vert, bleu et transp.

Les visuels décrivent comment les informations sur les couleurs sont codées et assemblées pour créer des macropixels. Les types décrivent comment les macropixels sont stockés en mémoire. Les types et visuels suivants sont pris en charge.

Une liste de visuels et de types suit, mais la description ne me suffit pas pour comprendre immédiatement les formats exacts.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
1
@Downvoters, veuillez expliquer afin que je puisse apprendre et améliorer les informations. Je ne riposte jamais. Merci.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1

Si vous le souhaitez cp /dev/fb0 ~/myimage, l'image ne doit contenir que les informations sur les pixels et l'ordre doit être correct ( RGB, BGR, RGBA, ARGB...)

Je veux le faire aussi, mais je n'ai pas trouvé d'outil approprié, donc j'utilise python pour m'aider à pré-créer l'image. Vous pouvez essayer ça .

zqb-all
la source
0

Si vous pouvez les installer, fbcatcréera une image ppm et fbgrabcréera une image png.

Yves Dorfsman
la source
0

Regardez /usr/include/linux/fb.h sur des structures comme fb_var_screeninfo. Il peut y avoir une variété de profondeurs de couleurs et de formats. Je vois 16 bits / pixel trop souvent, en ce moment j'en ai 32. Tapez fbset par lui-même et il affichera les paramètres actuels. Ce sera certainement une des entrées de /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 pourrait fonctionner si vous pouvez le faire correspondre exactement au mode dont vous avez besoin. J'écrirais probablement quelque chose en C, une douzaine de lignes appelant libjpeg ou libpng peuvent décompresser une image dans un tableau de mémoire. Vos bits / couleur, etc. doivent correspondre ou vous devez écrire quelque chose pour le convertir. Bonne expérience.

De plus, plutôt que de lire / écrire / dev / fb0 en tant que fichier, ouvrez-le () pour obtenir un descripteur de fichier, puis mmap () pour que vous travailliez avec un pointeur sur la mémoire. Il est beaucoup plus rapide de faire des transferts, au moins 10 fois.

Mais pour mettre des images à l'écran, j'installe juste qiv. Appuyez ensuite sur F1 pour obtenir de l'aide, mais un x pendant l'affichage d'une image l'écrira de manière semi-permanente dans la fenêtre racine si c'est ce que vous voulez. Ou définissez-le simplement comme fond d'écran dans les préférences du bureau et il apparaîtra à chaque démarrage.

Alan Corey
la source
ARGB de la mine apparemment (Raspbian). J'ai commencé avec des couleurs de type HTML à partir d'un sélecteur de couleurs GIMP, j'ai pris 4 essais pour bien faire les choses.
Alan Corey