Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1307 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Algo de dégradé de couleurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Algo de dégradé de couleurs

n°220414
Olyv
Posté le 26-09-2002 à 10:42:48  profilanswer
 

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.
 
 :benetton:  
 


---------------
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)
mood
Publicité
Posté le 26-09-2002 à 10:42:48  profilanswer
 

n°220415
lorill
Posté le 26-09-2002 à 10:46:12  profilanswer
 

Ca depends du mode de gestion des couleurs, de l'utilisation ou non d'une palette, etc... Tu peux préciser ?

n°220419
Olyv
Posté le 26-09-2002 à 10:50:08  profilanswer
 

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).


---------------
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)
n°220428
lorill
Posté le 26-09-2002 à 11:00:58  profilanswer
 

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 :
  1. boucle = 0
  2. while boucle < iteration:
  3.   R = Rd + ((Ra - Rd)/iteration)*boucle
  4.   G = Gd + ((Ga - Gd)/iteration)*boucle
  5.   B = Bd + ((Ba - Bd)/iteration)*boucle
  6.   couleur = (R, G, B)
  7.   boucle = boucle +1


 
pas testé, mais y'a pas de raison que ca marche pas.

n°220431
Olyv
Posté le 26-09-2002 à 11:02:33  profilanswer
 

ok je vais voir ce que ca donne.
et je te tiens au courant.
 ;)


---------------
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)
n°220432
LetoII
Le dormeur doit se réveiller
Posté le 26-09-2002 à 11:03:29  profilanswer
 

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é.


---------------
Le Tyran
n°220456
Joel F
Real men use unique_ptr
Posté le 26-09-2002 à 11:29:31  profilanswer
 

Attention, y fo ponderer ces coubres sinon l'espace des couleurs n'est pas correcte ...

n°220458
LetoII
Le dormeur doit se réveiller
Posté le 26-09-2002 à 11:31:05  profilanswer
 

Joel F a écrit a écrit :

Attention, y fo ponderer ces coubres sinon l'espace des couleurs n'est pas correcte ...




 
 :heink:


---------------
Le Tyran
n°220460
_Mac_
Posté le 26-09-2002 à 11:31:56  profilanswer
 

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  :D

n°220463
Joel F
Real men use unique_ptr
Posté le 26-09-2002 à 11:33:00  profilanswer
 

LetoII a écrit a écrit :

 
 
 :heink:  




 
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.

mood
Publicité
Posté le 26-09-2002 à 11:33:00  profilanswer
 

n°220465
Olyv
Posté le 26-09-2002 à 11:33:48  profilanswer
 

Citation :

 
Joel F a écrit :
--------------------------------------------------------------------------------
Attention, y fo ponderer ces coubres sinon l'espace des couleurs n'est pas correcte ...  
 
--------------------------------------------------------------------------------
 
 
 
:heink:  


 
j'allais le dire


---------------
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)
n°220466
LetoII
Le dormeur doit se réveiller
Posté le 26-09-2002 à 11:33:50  profilanswer
 

_Mac_ a écrit a écrit :

 
 
Pour être plus pompeux : l'espace des couleurs est un espace vectoriel orthonormé de dimension 3  :D  




 
 :non:  
 
C pas un espace vetoriel.


---------------
Le Tyran
n°220467
LetoII
Le dormeur doit se réveiller
Posté le 26-09-2002 à 11:34:41  profilanswer
 

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! :D


Message édité par LetoII le 26-09-2002 à 11:34:50

---------------
Le Tyran
n°220468
_Mac_
Posté le 26-09-2002 à 11:36:52  profilanswer
 

LetoII a écrit a écrit :

 
 
 :non:  
 
C pas un espace vetoriel.




 
Et pourquoi ce serait pas un espace vectoriel ?

n°220470
Joel F
Real men use unique_ptr
Posté le 26-09-2002 à 11:37:00  profilanswer
 

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

n°220472
Joel F
Real men use unique_ptr
Posté le 26-09-2002 à 11:37:58  profilanswer
 

_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 +,* ...

n°220474
LetoII
Le dormeur doit se réveiller
Posté le 26-09-2002 à 11:38:48  profilanswer
 

_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 :D
 
 
Edit: Grillé


Message édité par LetoII le 26-09-2002 à 11:39:07

---------------
Le Tyran
n°220476
_Mac_
Posté le 26-09-2002 à 11:43:17  profilanswer
 

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.

n°220543
Joel F
Real men use unique_ptr
Posté le 26-09-2002 à 13:02:38  profilanswer
 

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 ...

n°220617
BifaceMcLe​OD
The HighGlandeur
Posté le 26-09-2002 à 14:03:33  profilanswer
 

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".

n°220674
_Mac_
Posté le 26-09-2002 à 14:56:16  profilanswer
 

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.

n°220680
LetoII
Le dormeur doit se réveiller
Posté le 26-09-2002 à 14:57:59  profilanswer
 

_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


---------------
Le Tyran
n°220761
bjone
Insert booze to continue
Posté le 26-09-2002 à 15:44:14  profilanswer
 

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 :
  1. long dR,dV,dB;
  2. dR=((R1-R0)<<16)/nbr_itérations;
  3. dV=((V1-V0)<<16)/nbr_itérations;
  4. dB=((B1-B0)<<16)/nbr_itérations;
  5. while( nbr_itérations > 0 )
  6. {
  7.   Rsortie=(R0>>16);
  8.   Vsortie=(V0>>16);
  9.   Bsortie=(B0>>16);
  10.   R0+=dR;
  11.   V0+=dV;
  12.   B0+=dB;
  13.   nbr_itérations--;
  14. }

n°220799
_Mac_
Posté le 26-09-2002 à 16:32:49  profilanswer
 

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  :p

n°220806
LetoII
Le dormeur doit se réveiller
Posté le 26-09-2002 à 16:35:06  profilanswer
 

_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  :p  




 
 
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.


---------------
Le Tyran
n°220871
Joel F
Real men use unique_ptr
Posté le 26-09-2002 à 17:23:51  profilanswer
 

en tout cas je sais ki a une theorie + adaptée a ces prob que les EV ...

n°220939
darkoli
Le Petit Dinosaure Bleu
Posté le 26-09-2002 à 18:23:15  profilanswer
 

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 :D 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...


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°220941
darkoli
Le Petit Dinosaure Bleu
Posté le 26-09-2002 à 18:25:05  profilanswer
 

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 [:cupra]


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°1627709
dom01
Posté le 19-10-2007 à 20:50:51  profilanswer
 

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.
 
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 :
  1. long dR,dV,dB;
  2. dR=((R1-R0)<<16)/nbr_itérations;
  3. dV=((V1-V0)<<16)/nbr_itérations;
  4. dB=((B1-B0)<<16)/nbr_itérations;
  5. while( nbr_itérations > 0 )
  6. {
  7.   Rsortie=(R0>>16);
  8.   Vsortie=(V0>>16);
  9.   Bsortie=(B0>>16);
  10.   R0+=dR;
  11.   V0+=dV;
  12.   B0+=dB;
  13.   nbr_itérations--;
  14. }



 
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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Algo de dégradé de couleurs

 

Sujets relatifs
UNIX Scheme... faire un algo qui dit si un nombre est premierAlgo pour codage/decodage au f ormat "uuencode"
De la lenteur de string avec BC++ 5 et d'un algo de m*** en general ..[ALGO] les grand mondes .....
Créer un dégradé dans une cellule.....???algo deplacements
couleurs compatibles HTMLSite avec une liste de toutes les couleurs #xxxxxx ?
convertir un prog java en algo ?[HTML] Impression des couleurs de fond
Plus de sujets relatifs à : Algo de dégradé de couleurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR