Je souhaite convertir une palette linéaire 4096c (16 teintes par composante) en palette Thomson (instruction PALETTE du basic 512).
Je pensais que c'était tout simple, mais non.
Apparemment, la valeur passée à l'instruction PALETTE est codée de cette manière sur 2 octets : bbbbvvvvrrrrr.
Je me suis dit qu'il suffisait donc de calculer la valeur de PALETTE codée de cette façon en prenant les valeurs SDL mais dans ce cas les couleurs sont trop claires.
J'ai testé différents trucs avec ce que j'ai pu trouver sur les forums mais je n'obtiens jamais les teintes exactes.
Le mieux que j'ai obtenu, c'est en utilisant une table de correction:
int ef_vals[] = {0,100,127,142,163,179,191,203,215,223,231,239,243,247,251,255};
Ce qui me donne par exemple (rvb linéaire -> rvb thomson -> index palette thomson) :
Code : Tout sélectionner
0 1 1 -> 0 0 0 -> PALETTE 0,0
8 4 3 -> 2 1 0 -> PALETTE 1,18
5 2 1 -> 1 0 0 -> PALETTE 2,1
11 7 4 -> 5 1 1 -> PALETTE 3,277
2 2 2 -> 0 0 0 -> PALETTE 4,0
9 7 5 -> 3 1 1 -> PALETTE 5,275
6 5 3 -> 1 1 0 -> PALETTE 6,17
12 8 5 -> 6 2 1 -> PALETTE 7,294
2 1 0 -> 0 0 0 -> PALETTE 8,0
8 6 4 -> 2 1 1 -> PALETTE 9,274
5 5 4 -> 1 1 1 -> PALETTE 10,273
12 7 4 -> 6 1 1 -> PALETTE 11,278
3 4 3 -> 0 1 0 -> PALETTE 12,16
10 6 3 -> 4 1 0 -> PALETTE 13,20
7 5 3 -> 1 1 0 -> PALETTE 14,17
14 11 5 -> 9 5 1 -> PALETTE 15,345
Et la même image sur DCMOTO en utilisant la conversion de palette précédente :
Je me demande s'il est possible d'obtenir exactement les même teintes qu'avec la SDL.