Salutations !

Je suis en train de m'intéresser de près au "framebuffer", le mode console que l'on obtient en appuyant sur CTRL-ALT-F1 à F6.

J'ai fait un petit programme de "démonstration" qui est censé afficher des cadres de couleur pour rendre les applications de mes élèves plus jolies;
Le problème c'est que dans ma "librairie" j'utilise les codes d'échappement ANSI permettant d'afficher les couleurs au format RGB ça marche dans les consoles virtuelles de X mais par contre en framebuffer les couleurs sont "pourries" (d'un gris RGB(125,125,125) j'obtiens un turquoise). Par contre les codes couleur ANSI 'normaux" (le vert -- code 32 -- passe sans problème).

J'ai bien essayé fbgrab pour faire un screenshot du framebuffer mais l'image générée est pourrie elle aussi, illisible.

La question est la suivante: comme pourrais-je afficher les couleurs au format RGB en mode console (tty) ?

Le mode que j'ai sélectionné pour le framebuffer est 1400x1050 32bits (0x346).
Quand je fais un fbset voici ce qu'il m'indique:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
mode "1400x1050-77"
    # D: 147.037 MHz, H: 83.166 kHz, V: 77.436 Hz
    geometry 1400 1050 1400 1050 32
    timings 6801 168 32 16 4 168 4
    rgba 8/16,8/8,8/0,0/0
endmode
Voici les deux fonctions que j'utilise pour "générer" mes séquences ANSI:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
char* getRGBString(struct s_RGB target)
{
        char *pTmp=(char*)malloc(sizeof(char)*25); // \x1b[38;2;74;213;237;1m
        sprintf(pTmp,"\x1b[38;2;%d;%d;%d%sm",target.Red,target.Green,target.Blue,target.bold?";1":"");
        return pTmp;
}
struct s_RGB getRGB(short Red,short Green,short Blue,bool bold)
{
        struct s_RGB tmp={Red,Green,Blue,bold?1:0};
        return tmp;
}
...et voici la définition de la structure:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
struct s_RGB
{
        short Red;
        short Green;
        short Blue;
        bool  bold;
};