在java中更改颜色的亮度/饱和度

在java中更改颜色的亮度/饱和度,java,swing,colors,Java,Swing,Colors,目前我正在使用javax.swing进行一个模拟项目,我想根据草的食物价值在地图上画“草”。我的食物价值是0

目前我正在使用javax.swing进行一个模拟项目,我想根据草的食物价值在地图上画“草”。我的食物价值是0<1之间的两倍,我想让它变得更亮,因为它变得更大。我一直在读有关HSB/HSV的书,但不知道它是如何工作的/它的语法。解决这个问题的好办法是什么?或者有人能告诉我哪里有很好的教程吗

class-Grass{
私有void setColor(){
grassColor=新颜色(107、142、35);//我想以“死草”开头的RGB值
}
公共颜色getColor(){
return grassColor;//这是我想根据食物价值改变的东西;
}
私人双增长率=0.1;
公共空间增长(){
foodValue+=(foodValue<1.0)?growthRate:0;//将草生长到最大大小1.0
}
我想我还应该提到,我的食物值在初始化时被设置为随机浮点。感谢您的建议。

您可以将颜色的“绿色”值直接绑定到您的食物值。这将根据您的食物值增加颜色的绿色强度。这不需要额外更改

例如:

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
    }
}
class-Grass{
私人双食品价值=0.0;
私人双增长率=0.1;
私人色彩;
公共草地(){
setColor();
}
private void setColor(){//如果grassColor在顶部初始化,则可以删除此选项
grassColor=新颜色(107142+(int)(食品价值*100),35);
}
公共颜色getColor(){
返回颜色;
}
公共空间增长(){
foodValue+=(foodValue<1.0)?growthRate:0;//将草生长到最大大小1.0
}
}
这真的很简单,可能适合您的目的

    private void setColor(){
        grassColor = new Color(107, 142, 35);
    }

看到那些用于创建自定义颜色的数字了吗?它们可以是变量名,指向根据程序中其他可能影响颜色的内容在其他地方更新的数字

我有时会提到选择适合场合的颜色。它整齐地显示了不同系统的值,而不仅仅是RGB


如果您不想使用RGB系统,将为您提供一种使用HSB输入的方法。如果您想尝试另一种颜色系统,可能还有一些其他有用的东西。

您可能最好使用HSB颜色模型

  • H=色调;表示颜色圈:
    红色、黄色、绿色、青色、蓝色、洋红,然后返回红色

  • S=饱和度;颜色的纯度:
    零饱和度总是灰色。(R、G、B值都相等)
    最大饱和度始终至少有一个RGB值等于零

  • B=亮度;颜色有多暗:
    零亮度总是黑色的

使用
java。​awt。​getHSBColor(h,s,b)
您可以从(0.166,0.8,0.5)开始
哪种颜色是(黄色,略带柔和,中黑色),即棕色,
然后前进到(0.333,1.0,1.0)以获得纯春绿
也许最终的结果是(0.4,1.0,0.9)更暗,略带蓝色的夏季结果


根据您的需要使用数字。

我希望亮度以我的食物价值中的浮点数为基础。而不仅仅是让它在每次增长时变得更亮。