在红色和绿色之间为功率计生成颜色?

我正在编写一个Java游戏,并且我想要实现一个功率计,以便您能够很轻松地拍摄某些内容。

我需要编写一个函数,该函数的取值范围为0 - 100,根据数字的高低,它会返回绿色(功率级别为0)和红色(功率级别为100)之间的颜色。

类似于音量控制的工作方式:

我需要对颜色的红色,绿色和蓝色组件进行什么操作才能在绿色和红色之间生成颜色?

所以,我可以运行getColor(80) ,它将返回一个橙色(R,G,B中的值)或getColor(10) ,它将返回更多的绿/黄RGB值。

我知道我需要为R,G,B值增加一个新颜色的组件,但我不知道具体是什么随着颜色从绿色 - 红色转移而上升或下降。


进展:

我最终使用HSV / HSB色彩空间,因为我更喜欢渐变色(中间没有深褐色)。

我使用的功能是:

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);
}

“功率”是0.0到1.0之间的数字。 0.0会返回一个鲜红色,1.0会返回一个鲜绿色。

Java色调图:


这应该工作 - 只是线性缩放红色和绿色值。 假设您的最大红色/绿色/蓝色值是255 ,并且n在范围0 .. 100

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

(修正了整数数学,给费鲁西奥的帽子一角)

另一种方法是使用HSV颜色模型,并将色调从0 degrees (红色)循环至120 degrees (绿色),无论饱和度和适合您的值如何。 这应该会带来更加令人愉快的渐变。

下面是每种技术的演示 - 顶部渐变使用RGB,底部使用HSV:


在我的头顶,这里是HSV空间中的绿色 - 红色色调转换,转换为RGB:

blue = 0.0
if 0<=power<0.5:        #first, green stays at 100%, red raises to 100%
    green = 1.0
    red = 2 * power
if 0.5<=power<=1:       #then red stays at 100%, green decays
    red = 1.0
    green = 1.0 - 2 * (power-0.5)

上例中的红色,绿色,蓝色值是百分比,您可能需要将它们乘以255以获得最常用的0-255范围。


Short Copy'n'Paste answer ...

在Java Std上:

int getTrafficlightColor(double value){
    return java.awt.Color.HSBtoRGB((float)value/3f, 1f, 1f);
}

在Android上:

int getTrafficlightColor(double value){
    return android.graphics.Color.HSVToColor(new float[]{(float)value*120f,1f,1f});
}

注意:值是介于0到1之间的数字,表示从红到绿的状态。

链接地址: http://www.djcxy.com/p/87793.html

上一篇: Generate colors between red and green for a power meter?

下一篇: How to convert hex to rgb using Java?