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:
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 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
...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
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; }
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; };
Partager