A mon avis, PutPixel() prend plutôt un word qu'un byte pour la couleur, sauf si cette fonction ne connaît que les modes VGA qui ne servent plus depuis longtemps : 256 couleurs (nombre maxi permis par le byte), ça fait un peu pauvre.
Pour empaqueter les composantes RGB en un seul entiers, je ferais ça :
Code :
- var R, G, B : byte;
- var C : word; // ou Longint, ou n'importe quel type scalaire d'au moins 3 octets.
- C := R shl 16 + G shl 8 + B;
|
Ce qui revient à faire
Code :
- C := R * 65536 + G * 256 + B;
|
sauf qu'avec des SHift Left (shl), c'est beaucoup plus rapide pour le processeur qu'avec des multiplications. Si C mesure 4 octets (ça, ça dépend de ce que fait ton compilateur quand il voit "word" ), il sera rempli comme ça : 00000000RRRRRRRRGGGGGGGGBBBBBBBB.
Après, je sais pas si ta procedure PutPixel() s'adapte toute seule au mode graphique utilisé ou pas (tu pourras trouver ça dans la doc de ta procedure j'espère). Ce que j'ai dit au-dessus, ça marche pour un mode écran en couleurs 24 ou 32 bits. Pour du 15 bits, c'est
Code :
- C := (R shr 3) shl 10 + (V shr 3) shl 5 + B shr 3;
|
Et en 16 bits, c'est pareil sauf que le vert est codé sur 6 bits au lieu de 5, et je ne sais plus où on met sont LSB, si c'est sur le MSB de C (ie séparé du reste des bits V) ou si c'est à sa place 'normale', à droite des bits V. Fiou, ça me rappelle quand je compilais pour dos avec Pascal Lite Compiler...