maf*_*afu 20 c# gradient colors
我想根据彩虹颜色(红色......黄色......绿色......蓝色......)列出颜色.
我基本上看到两种方法:
创建一个包含一些重要参考颜色的查找表,并在它们之间进行插值.我完全不喜欢这个想法.
应用一些或多或少花哨的数学.可能更少,但我不太清楚它是如何工作的.有任何想法吗?
(哦,当我做了一些SO研究时,我发现没有好的结果.如果这个问题已经发布,请指出我的位置,我会删除它.)
编辑:我更喜欢这个独立于使用的技术来显示渐变.例如,GetRainbowColor(float f)之类的f(范围从0(红色)到1(紫色))会很有效.
Bri*_*ndy 31
这比你想象的要容易.
首先,您需要hsv或hsl到rgb转换功能. 这是进行转换的C#代码.
然后,您只需迭代所有可能的色调值,h同时保持saturations和光度l不变.
如果你想要100种颜色的彩虹间隔均匀:
for(double i = 0; i < 1; i+=0.01)
{
ColorRGB c = HSL2RGB(i, 0.5, 0.5);
//do something with the color
}
Run Code Online (Sandbox Code Playgroud)
您还可以GetRainbowColor通过将所有这些颜色添加到a List<ColorRGB>并返回适当的索引颜色,以这种方式轻松创建所需的功能.
我想用这个:
public static Color Rainbow(float progress)
{
float div = (Math.Abs(progress % 1) * 6);
int ascending = (int) ((div % 1) * 255);
int descending = 255 - ascending;
switch ((int) div)
{
case 0:
return Color.FromArgb(255, 255, ascending, 0);
case 1:
return Color.FromArgb(255, descending, 255, 0);
case 2:
return Color.FromArgb(255, 0, 255, ascending);
case 3:
return Color.FromArgb(255, 0, descending, 255);
case 4:
return Color.FromArgb(255, ascending, 0, 255);
default: // case 5:
return Color.FromArgb(255, 255, 0, descending);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26803 次 |
| 最近记录: |