Fonction pour la couleur RVB (RGB)

Fonction pour la couleur RVB (RGB) - Delphi/Pascal - Programmation

Marsh Posté le 19-05-2005 à 18:20:08    

Bonjour
 
Je suis en train de développer une app graphique avec Dev-pascal sous win Xp.
 
J'ai un petit prob pour les couleurs
en fait PutPixel prend 3 params : la pos en X, la pos en Y et un param couleur de type byte ou word (je sais plus trop)
mais moi j'aimerais lui passer des params RVB (RGB) donc faire une procedure

Code :
  1. procedure MyPutPixel(x:integer;y:integer;r:integer;g:integer;b:integer);
  2. var
  3. c: word;
  4. begin
  5. ...r,g,b...--> c
  6. PutPixel(x,y,c);
  7. end;


 
le probleme comme vous le voyiez est au niveau des ... pascal a tendance à pas comprendre  ;)  
que faut il que je mette ?
 
merci
 
a++


Message édité par MatMeuh le 19-05-2005 à 18:20:41
Reply

Marsh Posté le 19-05-2005 à 18:20:08   

Reply

Marsh Posté le 20-05-2005 à 15:09:59    

En Delphi il y a une fonction "RGB" mais je suppose que ça n'existait pas encore en Pascal :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-05-2005 à 15:54:31    

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 :
  1. var R, G, B : byte;
  2. var C : word; // ou Longint, ou n'importe quel type scalaire d'au moins 3 octets.
  3. C := R shl 16 + G shl 8 + B;


Ce qui revient à faire

Code :
  1. 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 :
  1. 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...

Reply

Marsh Posté le 23-05-2005 à 16:10:10    

Pour du Pascal sous DOS ça ne m'étonnerait pas que ce soit un mode avec palette, en 16 ou 256 couleurs donc. Là si c'est bien une application graphique c'est probablement des couleurs 24 bits comme en Win32 et en Delphi.
Il faut voir si c'est bien du RGB ; en Delphi par exemple les TColor sont en BGR. Je ne sais plus si ce type de couleurs est hérité de Win32 ou si c'est propre à Delphi.


Message édité par antp le 23-05-2005 à 16:11:14

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed