2013-01-04 46 views
0

我有一個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? 
    } 

任何想法如何解決這個問題?

+1

假設8位RGB,紅色分量的value/4095 * 255如何? –

+0

爲什麼要投票?顯示自己搖搖欲墜的downvoter! –

回答

1

這取決於您對中間色的需求。 RGB顏色被定義爲3個十六進制的兩位數字,其中#000000是黑色,#FFFFFF是白色。

第一個數字表示紅色,第二個表示綠色,第三個表示藍色。對於每種顏色,以便最大數量是255。

因此首先選擇期望的紅色,讓說這個人是好的:

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

由16加1的整數除法,你會用1送1個256遞減該值之間的值,並用它來計算出不同的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價值,但你明白了吧...

+1

如果你除以16你可以只是位移'(num + 1)>> 4'; – Sayse

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); 
+0

這不會輸出更廣泛的色譜比從黑色到紅色? – jellyfication

+0

因爲它是(我編輯它),它會產生從白色到紅色的漸變。就目前而言,當myInt從0到4095時,它會產生從黑色到紅色的漸變。 Color(1,1,1)(使用浮點構造函數)爲白色。當藍色和綠色成分均勻下降,紅色爲1時,顏色從白色逐漸變爲紅色。 在新代碼中,起始顏色爲(0,0,0)(即黑色),紅色成分逐漸增加,顏色從黑色變爲紅色。 – Mike