Porneia delights

— 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


Cet article a été exhumé par illovæ avec l'aimable autorisation de son auteur.

Vous pouvez envoyer par mail vos commentaires et vos remarques à gapz [at] dud-t [point] org.

Screenshot depuis un Frame-Buffer (258 mots) de gapz est diffusé sous la licence WTFPLv2 et Beer-ware (Révision 42).

Vulnerant omnes, ultima necat. Sic transit hominis regnum.
Copyleft © 2007 — gapz