140 votes

Générer des couleurs entre le rouge et le vert pour un compteur d’électricité ?

Je suis en train d'écrire un jeu en java et je veux implémenter un compteur de puissance pour comment dur vous allez tirer quelque chose.

J'ai besoin d'écrire une fonction qui prend un int entre 0 et 100, et en fonction de ce nombre est, elle sera de retour d'une couleur entre le Vert (de 0 sur la gamme de puissance) et Rouge (100 sur la gamme de puissance).

Similaire à la façon dont les contrôles du volume de travail:
alt text

Quelle opération dois-je faire sur le Rouge, Vert et Bleu d'une couleur pour générer des couleurs entre le Vert et le Rouge?

Donc, j'ai pu courir le dire, getColor(80) et il sera de retour une couleur orangée (ses valeurs dans R, G, B) ou getColor(10), qui sera de retour une plus Vert/Jaune valeur rvb.

Je sais que j'ai besoin d'augmenter les composantes de la R, G, B les valeurs d'une nouvelle couleur, mais je ne sais pas précisément ce qui se passe vers le haut ou vers le bas comme les couleurs changement de Vert-Rouge.


Progrès:

J'ai fini par utiliser le HSV/HSB espace de couleurs parce que j'ai aimé le gradiant mieux (pas de bruns foncés dans le milieu).

La fonction que j'ai utilisé était (en java):

public Color getColor(double power)
{
    double H = power * 0.4; // Hue (note 0.4 = Green, see huge chart below)
    double S = 0.9; // Saturation
    double B = 0.9; // Brightness

    return Color.getHSBColor((float)H, (float)S, (float)B);
}

D'où le "pouvoir" est un nombre compris entre 0.0 et 1.0. 0.0 retour d'un rouge vif, 1.0 sera de retour d'un vert lumineux.

Java Teinte Graphique:
alt text

Merci à tous de m'aider avec ça!

205voto

Paul Dixon Points 122033

Cela devrait - il suffit de linéaire de l'échelle, le rouge et le vert des valeurs. En supposant que votre max rouge/vert/bleu une valeur de 255, et n est dans la gamme de 0 à 100

R=(255*n)/100
G=(255*(100-n))/100; 
B=0

(Modifié pour l'entier des mathématiques, coup de chapeau à Ferrucio)

Une autre façon de faire serait d'utiliser un modèle de couleur HSV, et le cycle de la teinte de 0 degrés (rouge) à 120 degrés (en vert) qui, quelle que soit la saturation et la valeur adaptée. Cela devrait donner un plus agréable dégradé.

Voici une démonstration de chaque technique - haut gradient RVB, bas utilise HSV:

http://i38.tinypic.com/29o0q4k.jpg

32voto

Rafał Dowgird Points 16600

Sur le dessus de ma tête, voici le passage de la teinte vert-rouge dans l’espace HSV, traduit en RVB :

Le rouge, verts, bleus de valeurs dans l’exemple ci-dessus sont des pourcentages, vous voudriez probablement multiplier par 255 pour obtenir le plus utilisé 0-255 gamme.

12voto

willsteel Points 2318

Court Copy'n' coller la réponse...

Sur Java Std :

Sur Android :

Remarque : la valeur est un nombre compris entre 0 et 1 qui indique l’état du rouge au vert.

8voto

NeARAZ Points 4365

Interpolation linéaire entre le vert et le rouge presque devrait fonctionner, sauf que dans le milieu, il y aura boueux couleur brune.

La plus souple et la meilleur solution est d'avoir un fichier image quelque part qui a exactement la rampe de couleur que vous voulez. Et puis la recherche de la valeur de pixel. C'est la flexibilité que vous pouvez modifier le dégradé pour être juste.

Si vous voulez toujours le faire à partir du code, alors il est probablement préférable d'interpoler entre vert et jaune, les couleurs de la gauche, et entre le jaune et le rouge sur le côté droit. Dans l'espace RVB, le vert est (R=0, G=255, B=0), le jaune (R=255, G=255, B=0), le rouge est (R=255, G=0, B=0) - c'est en supposant que chaque composant de la couleur va de 0 à 255.

4voto

Nicholas Points 901

J’ai fait une petite fonction qui donne vous la valeur de l’entier rgb pour une valeur de pourcentage :

Donc si votre currentValue est 50 et votre maxValue est 100, cette fonction retournera la couleur dont vous avez besoin, donc si vous en boucle cette fonction avec une valeur en pourcentage, la valeur de votre couleur ira du vert au rouge. Désolé pour la mauvaise explication

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X