IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Retourner une couleur en fonction d'une valeur


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Retourner une couleur en fonction d'une valeur
    bonjour

    je cherche a creer une methode qui me retourne une couleur en fonction d'une valeure.

    Je m'explique j'ai une variable indiceCouleur qui varie de 0 a 1024 (donc j'ai 1024 niveau de couleur possible) sachant que le bleu = 0 et le rouge = 1024.
    En fait j'ai reussi mais c'est pas du tout propre. Voici mon code actuel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    int r=0,v=0,b=255;
     
    		if (0< indiceCouleur && indiceCouleur<=256){
    			r=0;
    			v=indiceCouleur-1;
    			b=255;
    		}
    		else if (256<indiceCouleur && indiceCouleur<=512){
    			r=0;
    			v=255;
    			b=(512-indiceCouleur);
    		}
    		else if (512<indiceCouleur && indiceCouleur<=768){
    			r=255-(768-indiceCouleur);
    			v=255;
    			b=0;
    		}	
    		else if (768<indiceCouleur && indiceCouleur<=1024){
    			r=255;
    			v=(1024-indiceCouleur);
    			b=0;
     
    		}
     
    		//genere l'objet couleur
    		Color c = new Color(r,v,b);
     
    		return c;

    Je vous avez prevenu c'est vraiment pourri !

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    et en quoi c'est pourri? On pourrait probablement se gratter la tête pour trouver une fonction générale, mais ça prendrait du temps à se gratter, ne gagnerait pas en performances, et serait illisible.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    ben je pensais peut etre en utilisant l'hexa, ça peut permettre de faire des calculs.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 611
    Points
    21 611
    Par défaut
    Citation Envoyé par vincent0808 Voir le message
    ben je pensais peut etre en utilisant l'hexa, ça peut permettre de faire des calculs.
    Nyu ?

    Si tu fais référence aux codes couleurs hexadécimaux utilisés en CSS par exemple, ils sont explicitement composés de 3 composantes couleurs indépendantes : rouge, vert et bleu.
    Suivant les cas, chacune peut avoir 16 ou 256 valeurs différentes, ce qui mène à 4.096 ou 16.777.216 couleurs différentes. 1.024 n'a pas grand-chose à voir avec ça : c'est composé de 10 bits et 10 n'est pas divisible par 3, donc pas moyen d'éclater en 3 composantes couleur égales.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par vincent0808 Voir le message
    ben je pensais peut etre en utilisant l'hexa, ça peut permettre de faire des calculs.
    l'hexadécimal n'est qu'un représentation d'un nombre. Comme je l'ai dit, on peux envisager de créer une formule qui donne les trois valeur en fonction de l'index, mais ce sera assez illisible au final. Au moins ton code actuel est facile à lire par celui qui doit débugger la méthode. Chercher une formule, c'est une perte de temps.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    d'accord mais le truc c'est que je veut pouvoir modifier la couleur de debut et la couleur de fin. Or là tout est en dur !

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Gia,

    Par contre, tu peux simplifier un peu, tes tests dans les sections else successives sont redondants.

    Par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		if (0< indiceCouleur && indiceCouleur<=256){
    			r=0;
    			v=indiceCouleur-1;
    			b=255;
    		}
    		else if (256<indiceCouleur && indiceCouleur<=512){
    			r=0;
    			...
    Peut être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		if (0< indiceCouleur && indiceCouleur<=256){
    			r=0;
    			v=indiceCouleur-1;
    			b=255;
    		}
    		else if (indiceCouleur<=512){
    			r=0;
    			...
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    alors là c'est différent


    En pratique, quel type de formule tu veux pour passer de la couleur X à la couleur Y? Les couleur sont des vecteurs à 3 dimensions. Tu veux aller linéairement de a,b,c à x,y,z, tu veux faire avancer progressivement a-> x puis seulement b-> y puis c->z?

    Tu veux travailler dans l'espace RGB? ou l'espace HSV?

    Il y a plein de type de dégradés possible. A cela, rajouter que, trouver 1024 étape entre deux couleurs, sachant que toutes les dimension vont de 1 à 255, c'est dur dur :s

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/11/2014, 15h24
  2. [XL-2010] Mettre une couleur en fonction d'une cellule
    Par cdan974 dans le forum Excel
    Réponses: 3
    Dernier message: 26/06/2014, 15h10
  3. Parametrer la couleur de fonds d'une page en fonction d'une autre
    Par miklbet dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 09/06/2011, 11h21
  4. Réponses: 4
    Dernier message: 26/08/2010, 08h20
  5. Réponses: 10
    Dernier message: 30/03/2009, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo