如何將整數轉換爲可用顏色(對於PictureBox.CreateGraphics)?將整數轉換爲顏色,從紅色開始並循環遍歷
顏色應該從紅色開始,循環到橙色,黃色等,然後一直回到紅色。
這是在vb.net。如果我不能這樣做,我如何使用十六進制代碼而不是筆使用PictureBox.CreateGraphics?
感謝您的幫助!
如何將整數轉換爲可用顏色(對於PictureBox.CreateGraphics)?將整數轉換爲顏色,從紅色開始並循環遍歷
顏色應該從紅色開始,循環到橙色,黃色等,然後一直回到紅色。
這是在vb.net。如果我不能這樣做,我如何使用十六進制代碼而不是筆使用PictureBox.CreateGraphics?
感謝您的幫助!
您可以使用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時回到紅色。
+1因爲我忘了以前。 – MusiGenesis 2009-10-07 02:02:03
+1因爲它做RGB的事情,現在我知道如何;) – Cyclone 2009-10-07 03:15:15
+1:ty爲您的完整答案! – 2009-10-07 01:17:27
哎喲,聽起來很辛苦大聲笑...虐待看看我是否可以掀起一個子程序,它將我的整數轉換爲可用數字。 – Cyclone 2009-10-07 01:29:55
不能這樣做>。> – Cyclone 2009-10-07 01:51:29