web-dev-qa-db-fra.com

puis-je afficher un fichier JPG ou PNG dans le framebuffer (/ dev / fb *)?

Je sais que je peux capturer le framebuffer sous Linux en utilisant quelque chose comme cp /dev/fb0 ~/myimage et le réafficher en revenant sur le périphérique de la sorte, donc cp ~/myimage /dev/fb0. Quel est le format des données d'image du framebuffer? et comment pourrais-je afficher une image prédéfinie (jpg, png) dans le framebuffer? Puis-je convertir ce format en utilisant imagemagick?

p.s. J'utilise un Raspberry Pi sous Raspbian.



Mise à jour 11-12-2012

J'ai fini par utiliser pygame pour afficher des images dans mon application. Pas sûr que cela utilise le frame-buffer pour afficher les images. Mais cela répond très bien à mes besoins.

17
ndmweb

Avez-vous essayé Fbida ?

fbida contient fbi, une visionneuse d'images pour le framebuffer.

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

P.S - Je ne sais pas si cela fonctionnera à Raspbian.

7
VenkatH

cela pourrait vous aider, manuel détaillé http://hacklab.cz/2012/04/22/usefulness-linux-framebuffer-virtual-console Je pense il a tout en un endroit à propos de Linux Framebuffer

3
MichaelHefner

Quel est le format des données d'image du framebuffer?

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épendant du matériel. Les applications doivent connaître le format de stockage des pixels pour écrire des données d'image dans la mémoire tampon de trame dans le format attendu par le matériel.

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

Les éléments visuels décrivent comment les informations de couleur 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.

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

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

1
zqb-all

Regardez /usr/include/linux/fb.h dans des structures telles que fb_var_screeninfo. Il peut y avoir une variété de profondeurs de couleurs et de formats. Je vois trop souvent 16 bits/pixel, pour le moment, j’en ai 32. Tapez fbset par lui-même et les paramètres actuels seront affichés. Ce qui sera presque certainement l'une des entrées dans /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 peut 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 () afin que vous utilisiez un pointeur sur la mémoire. C'est beaucoup plus rapide pour effectuer des transferts, au moins 10x.

Mais pour mettre des images sur l'écran, je viens d'installer qiv. Appuyez ensuite sur F1 pour obtenir de l'aide, mais un x tout en affichant une image l'écrira de manière semi-permanente dans la fenêtre racine si c'est ce que vous voulez. Ou simplement le définir comme papier peint dans les Préférences du bureau et il reviendra à chaque démarrage.

0
Alan Corey

Si vous pouvez les installer, fbcat créera une image ppm et fbgrab créera une image png.

0
Yves Dorfsman