La création dynamique des couleurs avec une luminosité différente
J'ai une couleur, je sais seulement au moment de l'exécution. À l'aide de cette couleur que je veux créer deux nouvelles couleurs, un très lumineuse et une aucun lumineux de la version de la couleur.
Donc, pour clarifier, dites que j'ai la couleur Rouge; je veux créer de la valeur du hex pour une "Lumière rouge" de couleur, et un "rouge Foncé" de couleur.
Comment pourrais-je aller sur le faire? Mon code est écrit en Java en utilisant GWT.
OriginalL'auteur user283524 | 2010-03-01
Vous devez vous connecter pour publier un commentaire.
Convertir les couleurs de la HSB/HSV (Teinte-Saturation-Luminosité/Valeur ) de l'espace et de régler la Luminosité de l'écran qui est plus léger et vers le bas pour le plus sombre. Puis de les convertir en arrière de nouveau. En Java:
La HSB espace est conçu pour ce genre d'opération.
Le point essentiel est que vous avez seulement besoin de faire varier la Luminosité terme pour obtenir l'éclaircissement/assombrissement de l'effet que vous souhaitez. Vous aurez à expérimenter avec la façon dont beaucoup vous éclaircir/assombrir.
Le code ci-dessus quarts de la Luminosité à mi-chemin vers le blanc pour mettre en évidence et à mi-chemin vers le noir à l'ombre. (J'ai utilisé ce code pour créer un effet de bordure sur un bouton.)
Voir: http://en.wikipedia.org/wiki/HSL_and_HSV et http://www.acasystems.com/en/color-picker/faq-hsb-hsv-color.htm
Edit: Selon les commentaires, la
java.awt.Color
classe ne peut pas être utilisé dans GWT. Depuis la seule partie de laColor
classe nous utilisons sont le HSV RVB et RVB pour le HSV conversions, comme vous êtes en utilisant GWT vous pourriez au lieu de google pour une mise en œuvre de ces algorithmes: Google HSV RVB algorithme de conversion. Par exemple:OriginalL'auteur Adrian Pronk
Il y a au moins deux décent des solutions, l'une plus "propre", de toute façon) que les autres. Cela dépend de ce que vous voulez de la couleur, ou un compromis contre les court et simple code.
À l'aide d'une couleur de l'espace que les modèles de luminosité
Le problème est que vos couleurs sont probablement spécifié que le RGB (ie, les quantités de rouge, vert et bleu, qui reflète votre moniteur.) La meilleure façon de changer une couleur, la luminosité est de spécifier vos couleurs dans une couleur différente de l'espace où la luminosité est l'une des composantes, tels que les HSB - teinte (couleur), la saturation ("montant" de la couleur) et la luminosité (auto-explicatif, je pense!)
Ce Article de Wikipedia sur la LGV et le HSV modèles de couleurs explique beaucoup plus que vous voulez probablement savoir 🙂
Ont un coup d'oeil à cette HSB démo.
Le point est, une fois que vos couleurs sont spécifiées dans un autre espace où l'une des composantes est la luminosité, le changement de la luminosité est facile parce que vous pouvez augmenter ou diminuer le composant que vous souhaitez, de la même façon vous pouvez augmenter ou diminuer la quantité de bleu dans une couleur RVB. Java, je pense, a la couleur des fonctions de conversion construit en quelques googler trouvé cette page, avec une pratique exemple de
de la Couleur.RGBtoHSB()
et de revenir à nouveau avecColor.HSBtoRGB
.Mélange avec le blanc ou le noir
C'est hackier, mais efficace dans la plupart des situations, et plus de code que j'ai écrit qui doit obtenir deux versions d'une même couleur (pour un dégradé, par exemple) pour quelque chose sans importance, comme un arrière-plan de l'INTERFACE utilisateur utilise ce genre de méthode. La logique est que la couleur sera plus lumineux qu'il se rapproche du blanc RVB (255,255,255) et plus sombre comme il se rapproche de noir RVB (0,0,0). Alors pour égayer quelque chose, mélange avec du blanc par, disons, 25%. Vous pouvez dégradé entre deux couleurs en prenant une proportion d'une couleur, et à l'inverse de la proportion de l'autre, pour chaque canal /composant.
La suite n'a pas été testé, et est une conversion de code Delphi que j'ai utilisée pour faire la même chose (le code est pris à partir de la mémoire, et en plus de cela je n'ai pas utilisé de Java depuis des années et ne me souviens pas de la syntaxe et de classes, et bien, je ne vous attendez pas à compiler, mais vous devriez être en mesure de se faire une idée):
Et vous auriez probablement l'utiliser comme:
Vous pourriez vouloir ajouter un peu de code de sécurité, notamment en assurant une pince entre 0..255 pour chaque composant, ou pour vérifier que
dAmount
est vraiment dans l'intervalle 0..1.La Java Couleur de la documentation ressemble à la
Color
classe a toutes sortes de méthodes utiles. (Edit: je viens de remarquer que vous dit que vous êtes en utilisantgwt
pasawt
- je ne l'ai pas utilisé et n'ont aucune idée de ce que les classes de base de Java sont inclus. Cela devrait vous diriger dans la bonne direction en tout cas.) Il est possible que cela n'est pas la façon la plus propre à Java - ça va être à cause de mon manque de connaissances sur les classes et les méthodes de ces jours - mais il devrait être suffisant pour vous rendre en bas de la piste. Espérons que ça aide!OriginalL'auteur David M
Je ne sais pas en qui format que vous avez la couleur (j'ai essayé de voir si GWT utilise des couleurs... mais ils comptent beaucoup sur le CSS de sorte qu'ils n'ont pas de propriétés).
De toute façon, si vous avez une seule valeur pour chaque composante (Rouge, vert, Bleu), et chaque valeur est comprise entre 0 et 255 -c'est la norme - puis appliquer cet algorithme:
Ensuite, vous aurez une nouvelle couleur (un nouveau trois composantes n-uplet).
Hexa des couleurs
Si vous avez des couleurs dans le format web:
vous aurez besoin de les convertir en int et retour à hexa:
Hexa string en int
int Hexa chaîne
OriginalL'auteur helios
Puisque vous êtes en utilisant GWT, vous devriez faire de votre couleur des calculs à l'aide de LGV, plutôt que de RVB, car il est plus intuitif, et peut être appliqué en tant que style couleur directement à vos composants.
Votre couleur initiale est "rouge" est défini comme "couleur: hsl(0,100%, 50%)", voir http://www.w3.org/TR/css3-color/#hsl-color pour en savoir plus sur le style de couleurs.
Pour obtenir une lumière rouge, tous vous avez besoin est d'augmenter le L (légèreté), donc un peu de rouge serait "color: hsl(0,100%, 75%)". Pour obtenir une rouge foncé, la diminution de la L composant, "color: hsl(0,100%, 25%)"
Pour appliquer votre couleur, il suffit de mettre de la couleur à l'aide de
OriginalL'auteur Ivo Bosticky
Il suffit d'Ajouter la fonction suivante dans votre code. Il sera de retour la valeur de hachage de plus léger et de couleur foncée selon vos besoins.
passer deux arguments.
(1) la valeur de hachage de votre couleur choisie.
(2) comment beaucoup plus claire ou plus foncée que vous voulez (Ex. si vous voulez 10% plus légère ombre puis passer 0.1 comme le deuxième argument et si vous voulez 40% plus sombre puis passer -0.4(valeur négative pour plus foncé) en tant que deuxième argument)
Donc, si vous voulez trouver 20% plus légère nuance de rouge, puis en appel en tant que ci-dessous
String lightred=convert("ff0000",0.2);
OriginalL'auteur Khushal Vora