根据范围缩放颜色强度

时间:2013-01-04 11:41:02

标签: c# colors

我有Button我希望将其颜色从黑色更改为红色,具体取决于0到4095之间的整数。

当数字为0时它应该是黑色而当这个数字增加时,比如达到4095它应该是全红色!

    ChangeColor(int num)
    {
        if(num== 0)
             lightRight.SetBackgroundColor(new Color(0,0,0));
        if(num> 4000)
            lightRight.SetBackgroundColor(new Color(255,0,0));
        //How to make a nice color that scales from 0 to 4095?
    }

知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

这取决于您对中间色的需求。 RGB颜色定义为3个十六进制两位数字,其中#000000为黑色,#FFFFFFF为白色。

第一个数字是RED,第二个是GREEN,第三个是BLUE。因此每种颜色的最大数量为255。

因此,首先选择所需的RED颜色,假设这个颜色很好:

R:219 G:62 B:0

然后按如下方式计算中间色,其中x属于[0,4095]:

int r = 219 * (x / 4095f) 
int g = 62 * (x / 4095f) 
int b = 0  * (x / 4095f) 

将这些值应用于按钮背景。

lightRight.SetBackgroundColor(new Color(r,g,b));

答案 1 :(得分:1)

除以16增加1的整数值,您将获得1到256之间的值。将此值减1,并使用它来计算不同的RGB分量

使用您的代码段:

ChangeColor(int num)
{
    // num being between 0 and 4095, get a value between 0 and 255
    int red = ((num + 1) / 16 ) - 1;
    lightRight.SetBackgroundColor(new Color(red,0,0));
}

你必须处理舍入和可能的-1值,但你明白了......

答案 2 :(得分:1)

int myInt; //The value that changes from 0 to 4095.
float red = myInt/4095.0;;
float green = 0;
float blue = 0;

Color myColor = new Color(red, green, blue);