Dégradé de couleur en RGB

[Résolu]
Signaler
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
-
 VelocityPulse -
Bonjour.

Voila pour représenter des températures je dois dans un programme je dois faire un dégradé de couleurs du jaune au rouge. Il faut donc que je fasse ça avec les RGB. Comment faire pour obtenir un dégradé uniforme avec n couleurs différentes?

Je demande pas l'algorithme tout fait (bien que je ne sois pas contre) mais au moins le principe :" tu ajoutes deux au rouge et trois au vert" enfin quelque chose comme ça que je puisse ensuite généraliser dans un algorithme.

Donc voila si quelqu'un peut me donner la méthode de création d'un dégradé merci bien.

Quand la merde vaudra de l'or les pauvres naitront sans trou du cul. Coluche.

24 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Je suis tout a fait d'accord avec toi. Les couleurs dans le systeme HSL sont plus instinctif plus proche de la perception humaine.

Cependant ca me parait étrange que les programmeurs de MSPaint voulant faire une représentation du codage HSL ne passe pas par le HSL...
J'aimerai que Miquel75 nous disent un peu plus précisement de la manière adoptée pour code ce dégrader.

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Ce n'est pas spécialement MSPaint qui est fait comme ca, c'est une boite de dialogue qui fait aprtie intégrante de Windows, tu l'obtiens en appelant la fonction ChooseColor (ca m'étonnerait aussi qu'il soit fait en RGB...)

_____________________________________
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Ha je ne savais pas pour cette boite de dialogue. C'est bon a savoir merci.

Bon en fait je pense que tout dépend du dégradé que l'on veut faire. Si on veut faire un dégradé entre deux couleurs voisines le codage RGB est amplement suffisant. Si on veut faire un dégradé plus étandu, le HSL semble etre une meilleure représentation

Je ne suis pas mécontent que tu penses comme moi pour la boite de dialogue ChooseColor.

Salut a tous !

J’ai beaucoup travaillé sur le sujet et pour ceux qui veulent la version pure C voici comment j’ai procédé.

typedef struct s_rgb 
{ 
  int r; 
  int g; 
  int b; 
} t_rgb;

typedef struct s_dual_color 
{ 
  t_rgb c1; 
  t_rgb c2; 
} t_dual_color;


La fonction:
c = les deux couleurs
c.c1 -> le départ
c.c2 -> la fin
n = le nombre de couleurs intermédiaires
p = l’endroit où nous nous trouvons (la position)

Cette fonction renvoi une couleur en rbg correspondant a la position (p) sur une nuance de deux couleur (c) avec comme information l’écart entre la couleur de depart et celle de fin (n).

t_rgb ft_find_color_gradient(t_dual_color c, int n, int p) 
{ 
  t_rgb d; 

  d.r = c.c1.r + (int)(((float)(c.c2.r - c.c1.r) / (float)n) * (float)p); 
  d.g = c.c1.g + (int)(((float)(c.c2.g - c.c1.g) / (float)n) * (float)p); 
  d.b = c.c1.b + (int)(((float)(c.c2.b - c.c1.b) / (float)n) * (float)p); 

  return (d); 
}