获取两个颜色HEX或RGB之间的颜色

6

可能是重复的问题:
在.NET中实现三种颜色之间的颜色插值

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

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

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

到目前为止,我的进展并不顺利。理想情况下,我希望能够提供两个HEX引用或RGB引用,并获得返回的10种颜色列表。在C#中是否可能实现?
编辑:找到了这个... http://meyerweb.com/eric/tools/color-blend/ 现在只需将js转换为c#即可。完成后会发布。

可能是重复问题:https://dev59.com/_UjSa4cB1Zd3GeqPIMNs - Steven Jeuris
2个回答

9

我不知道是否有内置函数可以帮助你,但是你可以自己实现。

只要颜色可以使用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;
}

我还没有编译代码,但你可以理解这个想法。


8
你要找的是插值。在这种特定情况下,你需要在两个关键点之间进行数据插值。
由于插值在编程中非常常见,我为此编写了通用解决方案,可以轻松地在两个或多个关键点之间进行插值,使用线性或甚至基数样条插值
使用我的库,你可以按如下方式计算中间颜色:
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 );

你需要通过扩展 AbstractInterpolationProvider<Color, double> 来实现 ColorInterpolationProvider,这很简单,更多信息可以在 我的博客文章 中找到。
此示例使用 Media.Color 类,但你也可以通过传递不同的插值提供程序来支持任何其他 Color 类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接