Comment faire un dégradé de couleur blanc-brun-vert en utilisant la couleur Java


J'essaie de faire un dégradé de couleur entre:

White (light to dark)
Brown (dark to light
Green (dark to ligh)

Mais je ne sais pas comment l'implémenter.

Ma tentative a été terrible, et donc je vous demande de l'aide.

Mon essai:

    for (int i = 255; i > 0; i--) {
        if (i > 230) {
            g2.setColor(new Color(0 + i, 0 + i, 0 + i));
        } else if (i <= 230 && i > 180) {
            g2.setColor(new Color(139 - (255 - i), 89 - (255 - i), 19));
        } else if (i <= 180 && i > 79) {
            g2.setColor(new Color(0, 60 + (180 - i), 0));
        } else {
            g2.setColor(Color.blue);
        }
        g2.drawLine(0, 255 - i, 500, 255 - i);
    }

Regardez:

SORTIE D'IMAGE DÉGRADÉE

Merci pour toute aide!

Author: chelocre, 2016-03-31

1 answers

Je pense que cela devrait être une sorte de:

for (int i = 255; i > 0; i--) {
    float h;
    float s;
    float v;
    if (i > 230) {
        h = 0;      // gray
        s = 0;
        v = 1f * i / 255;
    } else if (i <= 230 && i > 180) {
        h = 0.1;   // brown
        s = 0.8;
        v = 1f * (230 - i) / (230 - 180);
    } else if (i <= 180 && i > 79) {
        h = 0.33;  // green
        s = 1f;
        v = 1f * (180 - i) / (180 - 79);
    } else {
        h = 0.62;  // blue
        s = 1f;
        v = 1f;
    }
    g2.setColor(new Color(Color.HSBtoRGB(h, s, v)));
    g2.drawLine(0, 255 - i, 500, 255 - i);
}

L'idée est d'opérer dans l'espace colorimétrique HSV au lieu de RVB, où les composants H (teinte) et S (saturation) déterminent la position au cercle de couleur, et V détermine la "valeur" - à quelle distance est la couleur du point noir. Donc, vous fixez les composants H et S et variez V pour rendre une couleur plus claire ou plus foncée.

Voir: https://docs.oracle.com/javase/8/docs/api/java/awt/Color.html#HSBtoRGB-float-float-float-

Si vous trouvez plus approprié h et s constantes pour chaque couleur, n'hésitez pas à commenter/modifier.

 0
Author: Alex Salauyou, 2016-03-31 10:59:06