当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为功率计生成红色和绿色之间的颜色?》经验,为你挑选了5个好方法。

我正在写一个Java游戏,我想要实现一个功率计,你会有多难拍摄一些东西.

我需要编写一个在0到100之间取一个int的函数,根据该数字的高度,它将返回Green(功率刻度为0)和Red(功率刻度为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 Hue图表:
Java Hue图表



1> Paul Dixon..:

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

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

(修改为整数数学,给Ferrucio一顶帽子)

另一种方法是使用HSV颜色模型,并将色调从0 degrees(红色)循环到120 degrees(绿色),无论您的饱和度和值如何.这应该会给出更令人愉悦的渐变.

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

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


在HSV领域做这件事要好得多.

2> Rafał Dowgir..:

在我的脑海中,这是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范围.



3> mschmoock..:

Short Copy'n'Paste答案......

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

注意:value是0到1之间的数字,表示红色到绿色的条件.



4> Blowsie..:

如果你想要一个绿色 - 黄色 - 红色表示,如接受的答案建议,那么看看这个.

http://jsfiddle.net/0awncw5u/2/

function percentToRGB(percent) {
    if (percent === 100) {
        percent = 99
    }
    var r, g, b;

    if (percent < 50) {
        // green to yellow
        r = Math.floor(255 * (percent / 50));
        g = 255;

    } else {
        // yellow to red
        r = 255;
        g = Math.floor(255 * ((50 - percent % 50) / 50));
    }
    b = 0;

    return "rgb(" + r + "," + g + "," + b + ")";
}


function render(i) {
    var item = "
  • " + i + "
  • "; $("ul").append(item); } function repeat(fn, times) { for (var i = 0; i < times; i++) fn(i); } repeat(render, 100);
    li {
        font-size:8px;
        height:10px;
    }
    
    


      5> NeARAZ..:

      绿色和红色之间的线性插值几乎应该起作用,除了在中间会有泥褐色.

      最灵活,最佳的解决方案是在某处具有您想要的精确颜色渐变的图像文件.然后在那里查找像素值.这具有灵活性,您可以调整渐变恰到好处.

      如果你仍然想从代码中做到这一点,那么最好在左侧的绿色和黄色之间插入,在右侧的黄色和红色之间进行插值.在RGB空间中,绿色是(R = 0,G = 255,B = 0),黄色是(R = 255,G = 255,B = 0),红色是(R = 255,G = 0,B = 0) ) - 这假设每个颜色分量从0到255.

      推荐阅读
      吻过彩虹的脸_378
      这个屌丝很懒,什么也没留下!
      DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
      Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有