Dégradé de couleurs

Signaler
Messages postés
6
Date d'inscription
lundi 14 juillet 2003
Statut
Membre
Dernière intervention
28 février 2007
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
Salut,

Je voudrais remplir un rectangle avec un dégradé de couleurs avec les couleurs suivantes de gauche à droite : rouge jaune vert.
Je sais qu'il existe les GradientPaint mais ca ne permet d'utiliser que deux couleurs.
Quelqu'un aurait-il une solution autre que d'afficher une image avec le bon dégradé.

5 réponses

Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
17
ben tu peux voir avec la classe Color deja qui me semble bien adapter pour faire divers degrade
ensuite pour faire ton rectangle , je sais pas trop , pourquoi pas un BufferedImage ?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Et pourquoi ne pas dessiner sur la moitié d'un rectangle avec un premier dégradé puis sur la deuxième moitié du rectangle avec un second dégradé...
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Salut

j'ai fait plusieurs codes pour ça :

je te propose un truc du style :

<hr size="2" width="100%" />class PanelAvecUnRectangleRougeJauneVert extends JPanel{
   
    // couleurs utilisées (autant qu'on veut)
    Color[] couleurs = { Color.red, Color.yellow, Color.green };

    // taille de ton rectangle
    Dimension dRect = new Dimension(100, 50);
   
    // ustensiles pour dessiner
    BufferedImage bi;
    Graphics bg;
    int nbCouleurs;

    public Color getCouleur(double c, double cMin, double cMax) {

        if(nbCouleurs == 1) return couleurs[0];
        if(c == cMax) return couleurs[nbCouleurs-1];
         
        double i = ( (c - cMin) / (cMax - cMin) ) * (nbCouleurs - 1);

        int i1 = (int)i;
        int i2 = i1+1;
        double c1Weight i2-i, c2Weight 1-c1Weight;

       
        Color c1 = couleurs[i1];
        Color c2 = couleurs[i2];

        Color c = new Color(    (int)(c1Weight*c1.getRed())+(int)(c2Weight*c2.getRed()),
                (int)(c1Weight*c1.getGreen())+(int)(c2Weight*c2.getGreen()),
                (int)(c1Weight*c1.getBlue())+(int)(c2Weight*c2.getBlue()));

        return c;

    }
    public PanelAvecUnRectangleRougeJauneVert(){
       bi = new BufferedImage(dRect.width, dRect.height, BufferedImage.TYPE_INT_RGB);
       bg = bi.createGraphics();
       nbCouleurs = couleurs.lenght;
    }

    public void paint(Graphics g){
       for(coord = 0 ; coord < dRect.width ; coord++){
          bg.setColor(getCouleur(coord, 0, dRect.width - 1));
          bg.drawLine(coord, 0, coord, dRect.height - 1);
        }
    }
}
   
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
oups

il manque :

<hr size="2" width="100%" />g.drawImage(bi, 0, 0, null);
<hr size="2" width="100%" />
à la fin de la méthode paint()

je précise que je n'ai pas compilé ce code, donc je sais pas si ça marche
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Non, surtout pas : niveau optimisation, c'est le pire qu'on puisse faire (tracer des lignes de différentes couleurs) !

Voir ma source DKSGradientEditor par exemple qui consiste à utiliser les classes de l'API Java pour tracer des dégradés complexes.