获取两种颜色HEX参考或RGB之间的颜色

时间:2012-11-06 14:13:38

标签: c# .net colors

  

可能重复:
  Color Interpolation Between 3 Colors in .NET

我一直在尝试使用C#获取颜色的类别列表:

Red:
255, 69, 0
255, 99, 71
etc.. 

Green:
0, 250, 154
143, 188, 139
etc...

到目前为止,我一直很不成功。理想情况下,我想要的是提供两个HEX refs或RGB refs并在这两个引用之间获得10种颜色的列表。这在C#中是否可行?

修改

发现这个...... http://meyerweb.com/eric/tools/color-blend/只是将js转换为c#。将在完成时发布。

2 个答案:

答案 0 :(得分:6)

您要找的是interpolation。在这种特定情况下,您需要在两个关键点之间插入数据。

由于插值是编程时非常常见的情况,我wrote a generic solution for it可以轻松地使用线性或偶数cardinal spline interpolation在两个或多个关键点之间进行插值。

使用我的库,您可以按如下方式计算中间色:

var keyPoints = new CumulativeKeyPointCollection<Color, double>(
    new ColorInterpolationProvider() );

keyPoints.Add( Color.FromArgb(0, 250, 154) );
keyPoints.Add( Color.FromArgb(143, 188, 139) );

var linear = new LinearInterpolation<Color, double>( keyPoints ); 

// E.g. to get a color halfway the two other colors.
Color colorHalfway = linear.Interpolate( 0.5 );

您必须从ColorInterpolationProvider延伸来实施AbstractInterpolationProvider<Color, double>,但这非常简单,可以找到更多信息in my blog post

此示例使用Media.Color类,但您也可以通过传递不同的插值提供程序来支持任何其他Color类。

答案 1 :(得分:4)

我不知道可以帮助你的内置功能,但你可以自己动手。

只要使用3个数字(R,G,B)定义颜色,就可以采用两种颜色:

(R1,G1,B1)
(R2,G2,B2)

然后在对之间划分差异并按间隔产生数字。

int numberOfIntervals = 10; //or change to whatever you want.
var interval_R = (R2 - R1) / numberOfIntervals;
var interval_G = (G2 - G1) / numberOfIntervals;
var interval_B = (B2 - B1) / numberOfIntervals;

var current_R = R1;
var current_G = G1;
var current_B = B1;

for (var i = 0; i <= numberOfIntervals; i++)
{
    var color = Color.FromRGB(current_R, current_G, current_B);
    //do something with color.

    //increment.
    current_R += interval_R;
    current_G += interval_G;
    current_B += interval_B;
}

我没有编译代码,但你明白了。