【问题标题】:Algorithm to Generate WaveLength Color Gradient in C#在 C# 中生成波长颜色渐变的算法
【发布时间】:2010-01-28 15:34:26
【问题描述】:

我正在尝试生成以下颜色渐变(颜色一端为蓝色,另一端为红色)。


(来源:brothersoft.com

我遵循put forth here 的建议。这是我的代码:

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));
}

虽然我做的结果显示了从红色到蓝色的渐变平滑过渡,但其他中间颜色如黄色和绿色根本没有出现。

我做错了什么?

【问题讨论】:

    标签: c# color-scheme


    【解决方案1】:

    您应该使用 HSL 颜色空间中的颜色,而不是 RGB。这使您可以平滑地将色调值从 0(红色)更改为 1(紫色)。 System.Drawing.Color 结构允许从 RBG 转换为 HSL(GetHue 等),但不能相反。数学是simple though

    【讨论】:

    • ...这正是我所说的。
    【解决方案2】:
    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 的代码,但如果它真的等效,您会看到从黑色->灰色->白色逐渐过渡,根本没有其他色调。

    您似乎想要以恒定的亮度/饱和度迭代不同的色调。请参阅 here 以获取执行此操作的示例 C# 类,并查看 here 以获取对等式的解释。

    【讨论】:

      猜你喜欢
      • 2011-01-01
      • 2012-01-03
      • 2010-11-19
      • 1970-01-01
      • 2014-05-01
      • 2011-03-31
      • 2010-09-24
      • 1970-01-01
      相关资源
      最近更新 更多