Dégradé de couleurs

mhip Messages postés 6 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 28 février 2007 - 28 févr. 2007 à 19:11
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 19 juil. 2007 à 11:58
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é.
A voir également:

5 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
28 févr. 2007 à 19:29
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"
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
28 févr. 2007 à 19:45
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é...
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
19 juil. 2007 à 11:39
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);
        }
    }
}
   
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
19 juil. 2007 à 11:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
19 juil. 2007 à 11:58
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.
0
Rejoignez-nous