2

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

替代文字
(来源: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));
}

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

我做错什么了吗?

4

2 回答 2

4

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

于 2010-01-28T15:56:35.583 回答
1
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列出的代码,但如果它真的是等价的,你会看到从黑色->灰色->白色的逐渐过渡,根本没有其他色调。

您似乎想要以恒定的亮度/饱和度迭代不同的色调。有关执行此操作的示例 C# 类,请参见此处,有关等式的说明,请参见此处。

于 2010-01-28T15:51:23.583 回答