簡體   English   中英

C#中生成WaveLength顏色漸變的算法

[英]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 = 0rMax = 255 因此,您本質上是在設置

rAverage = 255 * i / size;

您沒有列出gAveragebAverage的代碼,但是如果它確實等效,那么您會看到從black-> gray-> white逐漸過渡,完全沒有其他色調。

您似乎想要的是以恆定的亮度/飽和度迭代不同的色調。 請參見此處的示例C#類,以及此處的等式說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM