[英]Algorithm to Generate WaveLength Color Gradient in C#
我正在嘗試生成下面的顏色漸變(顏色一端為藍色,另一端為紅色)。
(來源: brothersoft.com )
我遵循這里提出的建議。 這是我的代碼:
int rMax = Color.Red.R;
int rMin = Color.Blue.R;
// ... and for B, G
var colorList = new List<Color>();
for(int i=0; i<size; i++)
{
var rAverage = rMin + (int)((rMax - rMin) * i / size);
// ... and for B, G
colorList.Add(Color.FromArgb(rAverage, gAverage, bAverage));
}
盡管結果確實顯示了從紅色到藍色的漸變,平滑過渡,但其他中間顏色(如黃色和綠色)根本沒有出現。
我做錯了什么?
您應該使用HSL顏色空間中的顏色,而不是RGB。 這樣您就可以將色相值從0(紅色)平滑更改為1(紫色)。 System.Drawing.Color結構允許從RBG轉換為HSL(GetHue等),但不能相反。 雖然數學很簡單 。
int rMax = Color.Red.R;
int rMin = Color.Blue.R;
// ... and for B, G
var colorList = new List<Color>();
for(int i=0; i<size; i++)
{
var rAverage = rMin + (int)((rMax - rMin) * i / size);
// ... and for B, G
colorList.Add(Color.FromArgb(rAverage, gAverage, bAverage));
}
您正在設置rMin = 0
和rMax = 255
。 因此,您本質上是在設置
rAverage = 255 * i / size;
您沒有列出gAverage
和bAverage
的代碼,但是如果它確實等效,那么您會看到從black-> gray-> white逐漸過渡,完全沒有其他色調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.