Algo de dégradé de couleurs - Algo - Programmation
Marsh Posté le 26-09-2002 à 10:46:12
Ca depends du mode de gestion des couleurs, de l'utilisation ou non d'une palette, etc... Tu peux préciser ?
Marsh Posté le 26-09-2002 à 10:50:08
bo je me prends pas la tete, la palette c celle de windows.
En fait c pour un composant Delphi, on cherche à en changer la couleur. Donc on fonctionne en RGB ou HLS (on s'en fiche, on converti).
Marsh Posté le 26-09-2002 à 11:00:58
Bon, donc rgb sans palette.
Un algo simple, c'est
Séparer les composantes R, G et B pour les couleurs départ et arrivée (Rd, Gd, Bd et Ra, Ga, Ba on va dire).
Ensuite, tu décide combien de couleurs tu veux dans ton dégradé (iteration)
Code :
|
pas testé, mais y'a pas de raison que ca marche pas.
Marsh Posté le 26-09-2002 à 11:02:33
ok je vais voir ce que ca donne.
et je te tiens au courant.
Marsh Posté le 26-09-2002 à 11:03:29
Olyv a écrit a écrit : bo je me prends pas la tete, la palette c celle de windows. En fait c pour un composant Delphi, on cherche à en changer la couleur. Donc on fonctionne en RGB ou HLS (on s'en fiche, on converti). |
Las soluce la plus simple que je vois c de considérer tes couleurs comme des points dans un espace tridimetionnel et de calculer l'équation des droites reliant chaque couleur et parés en les parcourant ça te fait ton dégradé.
Marsh Posté le 26-09-2002 à 11:29:31
Attention, y fo ponderer ces coubres sinon l'espace des couleurs n'est pas correcte ...
Marsh Posté le 26-09-2002 à 11:31:05
Joel F a écrit a écrit : Attention, y fo ponderer ces coubres sinon l'espace des couleurs n'est pas correcte ... |
Marsh Posté le 26-09-2002 à 11:31:56
LetoII a écrit a écrit : Las soluce la plus simple que je vois c de considérer tes couleurs comme des points dans un espace tridimetionnel et de calculer l'équation des droites reliant chaque couleur et parés en les parcourant ça te fait ton dégradé. |
Pour être plus pompeux : l'espace des couleurs est un espace vectoriel orthonormé de dimension 3
Marsh Posté le 26-09-2002 à 11:33:00
LetoII a écrit a écrit : |
oui mosieur.
cf cour d'infographie de cette année, si tu vexu que ton espace des couleurs RGB soit correct topologiquement tu dois mettre des coeff sur les coordonnées lorsque tu calculs des normes/distances dans cette espace.
Marsh Posté le 26-09-2002 à 11:33:48
Citation : |
j'allais le dire
Marsh Posté le 26-09-2002 à 11:33:50
_Mac_ a écrit a écrit : Pour être plus pompeux : l'espace des couleurs est un espace vectoriel orthonormé de dimension 3 |
C pas un espace vetoriel.
Marsh Posté le 26-09-2002 à 11:34:41
Joel F a écrit a écrit : oui mosieur. cf cour d'infographie de cette année, si tu vexu que ton espace des couleurs RGB soit correct topologiquement tu dois mettre des coeff sur les coordonnées lorsque tu calculs des normes/distances dans cette espace. |
Putain arréte de lire les cours avant qu'on les ai!
Marsh Posté le 26-09-2002 à 11:36:52
LetoII a écrit a écrit : C pas un espace vetoriel. |
Et pourquoi ce serait pas un espace vectoriel ?
Marsh Posté le 26-09-2002 à 11:37:00
Ce que je me tu a vous dire ...
pr que l'espace RGB soit vectoriel fo ponderr ses coordonnées :
http://mitpress2.mit.edu/e-journal [...] inazi.html
Marsh Posté le 26-09-2002 à 11:37:58
_Mac_ a écrit a écrit : Et pourquoi ce serait pas un espace vectoriel ? |
1. l'espace RGB est borné 0 < (r,g,b) < 255
2. Trouve moi une norme ...
3. les détails cocasses sur les opérations de type +,* ...
Marsh Posté le 26-09-2002 à 11:38:48
_Mac_ a écrit a écrit : Et pourquoi ce serait pas un espace vectoriel ? |
Trouve moi un corp sur lequel serait fondé l'espace des couleur RGB et là tu poura dire quec un espace vectoriel
Edit: Grillé
Marsh Posté le 26-09-2002 à 11:43:17
Joel F a écrit a écrit : Ce que je me tu a vous dire ... pr que l'espace RGB soit vectoriel fo ponderr ses coordonnées : http://mitpress2.mit.edu/e-journal [...] inazi.html |
Je vois pas en quoi pondérer les coordonnées va transformer l'espace RGB en espace vectoriel ; tu vas peut-être les pondérer pour transformer ta base en base normé, mais c'est tout... Dans tous les cas, vu que c'est un cube (dixit Eskinazi), on a une base orthogonale. Après, tu peux sir que c'est normé en choisissant une base qui va bien.
Marsh Posté le 26-09-2002 à 13:02:38
au temps pour moi, égarement pre-digestif ...
Néanmoins, si tu fais
A(255,255,255) + B(255,255,255) ben tu sort de l'espace ...
Marsh Posté le 26-09-2002 à 14:03:33
Une info supplémentaire : notre oeil n'est pas sensible de la manière dans toutes les nuances de couleurs. Si tu veux un beau dégradé entre du noir et du bleu 100 % (i.e. RGB(0, 0, 255)), ce n'est pas une droit mais une courbe de Bézier entre ces 2 points du cube des couleurs qu'il te faut, pour, ici, augmenter le nombre de nuances disponibles près du noir par rapport à la "moyenne".
Marsh Posté le 26-09-2002 à 14:56:16
Joel F a écrit a écrit : au temps pour moi, égarement pre-digestif ... Néanmoins, si tu fais A(255,255,255) + B(255,255,255) ben tu sort de l'espace ... |
Ben non, tu sors pas de l'espace, tu sors simplement des capacités d'affichage de la machine... C'est pareil : un espace vectoriel est défini sur un corps (R ou C), et du coup, tu peux imaginer une couleur valant (12.34454, -2.3452342, 90). Le calcul se fait sur l'espace vectoriel, et après tu réajuste par rapport aux capacités de la machine, donc codage de chaque couleur sur 8 bits ; la translation sur le segment [0, 255] se fait en dernier. Voila.
Marsh Posté le 26-09-2002 à 14:57:59
_Mac_ a écrit a écrit : Ben non, tu sors pas de l'espace, tu sors simplement des capacités d'affichage de la machine... C'est pareil : un espace vectoriel est défini sur un corps (R ou C), et du coup, tu peux imaginer une couleur valant (12.34454, -2.3452342, 90). Le calcul se fait sur l'espace vectoriel, et après tu réajuste par rapport aux capacités de la machine, donc codage de chaque couleur sur 8 bits ; la translation sur le segment [0, 255] se fait en dernier. Voila. |
Oui donc l'ensemble des couleurs affichable n'es pas un EV
Marsh Posté le 26-09-2002 à 15:44:14
je sais pas ou vous partez, mais le 255 pour dû aux 8 bits par composantes veux dire que le 1.0 (100% de la composante) est 255.
et quand les cartes 3D font des multiplications de textures, on une appli fait des traitements graphiques, elles font pas 255*255=65025, mais 255 (=1.0) * 255 (=1.0) = 255 (1.0).
idem une image RVB en 16 bpp 5:6:5 qui est serait à (31:63:31) serait à interpréter en 24 bpp en (255:255:255) ou encore en RVB 30 bpp (10:10:10) en (1023:1023:1023), mais ça fait toujours R 100% V 100% B 100%.
ensuite je sais pas si on peut dire que c'est un espace vectoriel (et je m'en fous, quoique), mais on parle bien de repère, quand on passe d'un repère RGB à un repère YUV via un matricage.... (ce que font les magnétoscopes, ou une 3dfx avec ses formats de textures propriétaires).
en tout cas pour la réponse lorill est le plus proche, et le mieux c'est de calculer les coefficients directeurs à l'éxtérieur de la boucle, du style:
coefs dR,dV,dB;
dR=(R1-R0)/nbr_itérations
dV=(V1-V0)/nbr_itérations
dB=(B1-B0)/nbr_itérations
tant que nbr_itérations > 0
Rsortie=R0
Vsortie=V0
Bsortie=B0
R0+=dR
V0+=dR
B0+=dR
nbr_itérations--
fin tant que
ensuite attention à la précision de calcul, dans cet exemple fo une précision fractionnaire, et comme fo jamais mélanger le flottant et l'entier pour les perfs, vo mieux bosser en virgule fixe....
Code :
|
Marsh Posté le 26-09-2002 à 16:32:49
LetoII a écrit a écrit : Oui donc l'ensemble des couleurs affichable n'es pas un EV |
Effectivement, dans la mesure où un sous-ensemble d'espace vectoriel n'est pas forcément un espace vectoriel. Mais mathématiquement, pour le calcul, on peut toujours se ramener à un espace vectoriel, voire même à un espace affine, surtout que tu as été le premier à aborder le sujet en parlant d'équation de droite
Marsh Posté le 26-09-2002 à 16:35:06
_Mac_ a écrit a écrit : Effectivement, dans la mesure où un sous-ensemble d'espace vectoriel n'est pas forcément un espace vectoriel. Mais mathématiquement, pour le calcul, on peut toujours se ramener à un espace vectoriel, voire même à un espace affine, surtout que tu as été le premier à aborder le sujet en parlant d'équation de droite |
Par ce que j'avais l'image du cube de couleur dans la tête et que ça me semblait la façon la plus simple d'en parler.
Marsh Posté le 26-09-2002 à 17:23:51
en tout cas je sais ki a une theorie + adaptée a ces prob que les EV ...
Marsh Posté le 26-09-2002 à 18:23:15
LetoII a écrit a écrit : Las soluce la plus simple que je vois c de considérer tes couleurs comme des points dans un espace tridimetionnel et de calculer l'équation des droites reliant chaque couleur et parés en les parcourant ça te fait ton dégradé. |
Oui donc sans aller dans l'espace tu décde du nombre de couleurs intermediaires -> n et pis
de la couleur a à la couleur b, si tu veux 5 couleurs
ben :
* ri = (((rb-ra)/(5+1))*i)+ra pour i=1..n
idem avec g et idem avec b...
Marsh Posté le 26-09-2002 à 18:25:05
Joel F a écrit a écrit : au temps pour moi, égarement pre-digestif ... Néanmoins, si tu fais A(255,255,255) + B(255,255,255) ben tu sort de l'espace ... |
mais (255+255)&255 C'est bon, tu restes dans l'espace
Marsh Posté le 19-10-2007 à 20:50:51
bjone a écrit : je sais pas ou vous partez, mais le 255 pour dû aux 8 bits par composantes veux dire que le 1.0 (100% de la composante) est 255.
|
Bonjour,
J'essaie actuellement d'implémenter cet algo en C# mais il y a une erreur dans le code en effet les variables Rsortie, Vsortie et Bsortie ne sont pas utilisée.
Peux-tu corriger ton algo ?
De plus à quoi correspond l'orépateur >> ?
Merci
Marsh Posté le 26-09-2002 à 10:42:48
Salut,
je cherche un algo qui permettrai de faire un dégradé de couleurs un peu à la manière de Yahoo messenger.
On choisit plusieurs couleurs, et l'ago calcul les couleurs intermédiaires de facon à créer un beau nuancé de couleurs.
---------------
La mort... c'est un peu comme la connerie. Le mort, lui, il ne sait pas qu'il est mort... ce sont les autres qui sont tristes. Le con, c'est pareil... (Le Chat)