Algo de génération de dégrade [RESOLU]

Algo de génération de dégrade [RESOLU] - C++ - Programmation

Marsh Posté le 07-06-2003 à 21:56:18    

Voila je veux générer un dégradé de 255 couleurs a partir d'une couleur de depart en RGB et d'une couleur d'arrivée en RGB aussi. Une premiére idée avait été de passer en YUV (ou equivalent) et de faire des modifs sur U ou/et V mais c bof ...
 
Comment puis-je m'y prendre ...
 
Merci
 
PS : j'utilise Allegro :P


Message édité par Joel F le 08-06-2003 à 10:16:23
Reply

Marsh Posté le 07-06-2003 à 21:56:18   

Reply

Marsh Posté le 07-06-2003 à 22:12:08    

Joel F a écrit :

Voila je veux générer un dégradé de 255 couleurs a partir d'une couleur de depart en RGB et d'une couleur d'arrivée en RGB aussi. Une premiére idée avait été de passer en YUV (ou equivalent) et de faire des modifs sur U ou/et V mais c bof ...
 
Comment puis-je m'y prendre ...
 
Merci
 
PS : j'utilise Allegro :P


Première idée, surement conne:
1) Calculer les valeurs absolues des différences R1-R, G1-G2, B1-B2
2) Diviser les resultats par 255 / 3, ca te donne les pas de décalage.
3) Tu boucles 255 fois, et à chaque fois tu modifies R1, G1 ou B1 (à tour de role) du pas de décalage qui va bien de façon à les faire tendre vers R2G2B2...
 
A priori tu devrais pas être trop mal, à condition d'avoir des couleurs assez différentes à la base...non?

Reply

Marsh Posté le 07-06-2003 à 22:38:21    

euh bof ...
essaye avec RGB(10,255,64) et RGB(10,255,63) et tu va voir que c'est pas si simple :/
 
J'ai l'impression que l'espace RGB ne se prete pas bien au interpolation ...

Reply

Marsh Posté le 07-06-2003 à 22:48:41    

dithering, dans ce cas là ?


---------------
last.fm
Reply

Marsh Posté le 07-06-2003 à 22:51:50    

Joel F a écrit :

euh bof ...
essaye avec RGB(10,255,64) et RGB(10,255,63) et tu va voir que c'est pas si simple :/
 
J'ai l'impression que l'espace RGB ne se prete pas bien au interpolation ...


D'un autre coté un dégradé entre 2 couleurs voisines je vois pas trop l'intéret... [:skeye]

Reply

Marsh Posté le 07-06-2003 à 23:09:02    

Tu es en 32 bits au moins?

Reply

Marsh Posté le 07-06-2003 à 23:26:18    

@skeye : ouaip bon mon exemple etait bidon ...
 
Oui je suis en 32bits.

Reply

Marsh Posté le 08-06-2003 à 10:16:07    

Bon ben mea culpa :
 

Code :
  1. test_gradient = create_bitmap(254,1);
  2.     r1 = 255;
  3.     g1 = 27;
  4.     b1 = 199;
  5.     r2 = 0;
  6.     g2 = 255;
  7.     b2 = 32;
  8.     dr=(r2-r1)/255.0;
  9.     dg=(g2-g1)/255.0;
  10.     db=(b2-b1)/255.0;
  11.     for( i=0;i<255;i++ )
  12.     {
  13.         putpixel( test_gradient, i, 0, makecol(r1,g1,b1) );     
  14.         r1 += dr;
  15.         g1 += dg;
  16.         b1 += db; 
  17.     }


 
fonctionne bien ?? Pourtant avant non ??? une erreur de ma part donc :P
Merci encore a tous.

Reply

Marsh Posté le 08-06-2003 à 10:31:27    

Joel F a écrit :

Bon ben mea culpa :
 

Code :
  1. test_gradient = create_bitmap(254,1);
  2.     r1 = 255;
  3.     g1 = 27;
  4.     b1 = 199;
  5.     r2 = 0;
  6.     g2 = 255;
  7.     b2 = 32;
  8.     dr=(r2-r1)/255.0;
  9.     dg=(g2-g1)/255.0;
  10.     db=(b2-b1)/255.0;
  11.     for( i=0;i<255;i++ )
  12.     {
  13.         putpixel( test_gradient, i, 0, makecol(r1,g1,b1) );     
  14.         r1 += dr;
  15.         g1 += dg;
  16.         b1 += db; 
  17.     }


 
fonctionne bien ?? Pourtant avant non ??? une erreur de ma part donc :P
Merci encore a tous.


[:cupra]

Reply

Sujets relatifs:

Leave a Replay

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