gapz.tuxfamily.org, 18 mai 2007, gapz — Voici une petite astuce qui vous permet de prendre une capture d' écran depuis un FrameBuffer. Malgré tout les outils déja disponibles il vous faudra un petit soft qui permettra de convertir un fichier au format RAW (qui correspondra au contenu de la mémoire du frame-buffer) en un fichier au format PNM. En voici la source :
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
int len;
unsigned short buf[256];
FILE *f;
int w, h;
w=1024;
h=768;
printf("P6\n%d %d \n255\n", w, h);
f=fopen(argv[1], "rb");
while((len=fread(buf, 2, 256, f))!=0)
{
int i;
for (i=0; i<len; i++)
{
unsigned char r, g, b;
#ifdef BYTESWAP
buf[i]=((buf[i] & 0xff00) >> 8) + ((buf[i] & 0x00ff) << 8);
#endif
r=(buf[i] & 0xF800) >> 8;
g=(buf[i] & 0x07E0) >> 3;
b=(buf[i] & 0x001F) << 3;
printf("%c%c%c", r, g, b);
}
}
return(0);
}
Une fois la source adaptée à votre configuration, compilée (gcc
raw2pnm.c -o raw2pnm
) et placé (le binaire !) dans un chemin
(echo $PATH
) adéquat:
$ cp /dev/fb0 scrot.raw; raw2pnm scrot.raw | convert - scrot.png $ rm scrot.raw
Bien entendu, il y a mille façons de convertir le "pnm" dans
le format que vous voulez ;-). Voici quelques screenshots réalisés
avec cette méthode: fb.png, frame-buffer.png,
irssi-mplayer-fb.png. Il existe aussi quelques outils
dédiés tel que FBGrab
Astuce glanée dans le livre Linux embarqué 2eme édition de Pierre Ficheux, EAN : 978-2212116748