Изменение яркости / насыщенности цвета в java - PullRequest
1 голос
/ 09 июля 2020

В настоящее время я работаю над проектом моделирования с использованием javax.swing, и я хочу нарисовать «траву» на моей карте на основе ее пищевой ценности. Моя пищевая ценность в два раза больше, чем 0 <1, и я хочу делать ее ярче, когда она становится больше. Я читал о HSB / HSV, но не могу понять, как он работает / его синтаксис. Какое хорошее решение этой проблемы? Или может кто-нибудь направить меня куда-нибудь, где есть хороший учебник? Ценю любой совет. </p>

Ответы [ 3 ]

1 голос
/ 09 июля 2020
    private void setColor(){
        grassColor = new Color(107, 142, 35);
    }

Видите те числа, которые использовались для создания вашего собственного цвета? Это могут быть имена переменных, указывающие на числа, которые обновляются в другом месте в зависимости от того, что еще в вашей программе должно влиять на цвет.

Иногда я обращаюсь к https://www.google.com/search?client=safari&rls=en&q=rgb+color+picker&ie=UTF-8&oe=UTF-8, чтобы выбрать подходящий цвет по случаю. Он четко показывает значения для разных систем, а не только для RGB.

https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#getHSBColor (float,% 20float,% 20float) даст вам возможность использовать входы HSB, если вы этого не сделаете. Не хочу go с системой RGB. Там могут быть и другие полезные вещи, если вы хотите попробовать еще одну цветовую систему.

1 голос
/ 09 июля 2020

Вероятно, лучше всего использовать цветовую модель HSB.

  • H = Hue; представляет собой цветной круг: Красный, Желтый, Зеленый, Голубой, Синий, Пурпурный и обратно в Красный.

  • S = Насыщенность; насколько чистый цвет: Нулевая насыщенность - это всегда оттенок серого. (Все значения R, G, B равны) Максимальная насыщенность всегда имеет хотя бы одно значение RGB, равное нулю.

  • B = Яркость; насколько темный цвет: Нулевая яркость всегда Черный

Используя java.​awt.​Color.getHSBColor(h, s, b), вы можете начать с (0,166, 0,8, 0,5) который будет (желтый, слегка приглушенный, средне-темный), то есть коричневый sh, затем переходите к (0,333, 1,0, 1,0), чтобы получить чистый весенний зеленый цвет. и, возможно, в итоге получим (0,4, 1,0, 0,9) для более темного, чуть более голубого, летнего результата.

Поиграйте с числами в соответствии со своими потребностями.

0 голосов
/ 09 июля 2020

Вы можете привязать свое «зеленое» значение вашего цвета непосредственно к foodValue. Это увеличит интенсивность зеленого цвета вашего цвета в соответствии с вашим foodValue. Это не потребует дополнительных изменений.

Пример:

class Grass {
    
    private double foodValue = 0.0;
    private double growthRate = 0.1;
    private Color grassColor;
    
    public Grass() {
        setColor();
    }
    
    private void setColor(){ // this could be removed if grassColor is initialized on top
        grassColor = new Color(107, 142 + (int)(foodValue * 100), 35); 
    }
    public Color getColor(){
        return grassColor;
    }
    
    public void grow(){
        foodValue += (foodValue < 1.0) ? growthRate : 0; //grows the grass to max size of 1.0
    }
}

Это действительно просто и может сработать для ваших целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...