2009-10-07 70 views
3

如何將整數轉換爲可用顏色(對於PictureBox.CreateGraphics)?將整數轉換爲顏色,從紅色開始並循環遍歷

顏色應該從紅色開始,循環到橙色,黃色等,然後​​一直回到紅色。

這是在vb.net。如果我不能這樣做,我如何使用十六進制代碼而不是筆使用PictureBox.CreateGraphics?

感謝您的幫助!

回答

9

您可以使用HSB(色相,飽和度,亮度)顏色代替RGB顏色。 .Net可以自動將RGB顏色轉換爲HSB(使用Color.GetHue,.GetSaturation和.GetBrightness方法),但不會朝另一個方向前進。這裏是處理轉換HSB顏色RGB一個代碼示例:

http://splinter.com.au/blog/?p=29

(此代碼示例使用「V」,而不是「B」,可能是「值」而不是「亮度」)。

使用HSB顏色的好處是Hue參數的範圍從0到360,並且可以解釋爲色輪上的位置,所以這些值很好地從360迴繞到0處。爲了您的目的,您可以通過將「飽和度」和「亮度」值設置爲1.0(最大值)來創建顏色,然後改變色調值以創建不同的光譜顏色。

在問候您的具體問題(並闡述魯本斯的答案),您可以創建任何int32值這樣的顏色:

int i = 4837429; 
Color color = Color.FromArgb(i); 

但是,這不會達到環繞在你的問題中描述的顏色效果,事實上你的int32值的許多變化(假設你的範圍從MinValue到MaxValue)將適用於alpha通道或不透明度,這聽起來不像你想。

更新:這裏的東西是應該做的,你需要的東西:

private const double ONE_SIXTH = 
    0.16666666666666666666666666666667; 
private const double ONE_THIRD = 
    0.33333333333333333333333333333333; 
private const double TWO_THIRDS = 
    0.66666666666666666666666666666667; 
private const double FIVE_SIXTHS = 
    0.83333333333333333333333333333333; 
public Color WheelColor(double d) 
{ 
    if ((d < 0.0) || (d > 1.0)) 
    { 
     throw new ArgumentOutOfRangeException("d", 
      d, "d must be between 0.0 and 1.0, inclusive"); 
    } 
    double R = 1; 
    double G = 1; 
    double B = 1; 
    if (d < ONE_SIXTH) 
    { 
     G = d/ONE_SIXTH; 
     B = 0; 
    } 
    else if (d < ONE_THIRD) 
    { 
     R = 1 - ((d - ONE_SIXTH)/ONE_SIXTH); 
     B = 0; 
    } 
    else if (d < 0.5) 
    { 
     R = 0; 
     B = (d - ONE_THIRD)/ONE_SIXTH; 
    } 
    else if (d < TWO_THIRDS) 
    { 
     R = 0; 
     G = 1 - ((d - 0.5)/ONE_SIXTH); 
    } 
    else if (d < FIVE_SIXTHS) 
    { 
     R = (d - TWO_THIRDS)/ONE_SIXTH; 
     G = 0; 
    } 
    else 
    { 
     B = 1 - ((d - FIVE_SIXTHS)/ONE_SIXTH); 
     G = 0; 
    } 
    return Color.FromArgb((int)(R * 255), 
     (int)(G * 255), (int)(B * 255)); 
} 

在WheelColor的d個參數是0.0去到1.0,並且會循環通過色輪(在某種程度上),當d = 0.0時從紅色開始,當d = 1.0時回到紅色。

+0

+1:ty爲您的完整答案! – 2009-10-07 01:17:27

+0

哎喲,聽起來很辛苦大聲笑...虐待看看我是否可以掀起一個子程序,它將我的整數轉換爲可用數字。 – Cyclone 2009-10-07 01:29:55

+0

不能這樣做>。> – Cyclone 2009-10-07 01:51:29