【问题标题】:Get colors between two color HEX refs or RGB [duplicate]获取两种颜色 HEX refs 或 RGB 之间的颜色 [重复]
【发布时间】:2012-10-26 12:18:02
【问题描述】:

可能重复:
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 参考或 RGB 参考的方法,并在这两个参考之间获得一个包含 10 种颜色的列表。这在 C# 中可行吗?

编辑

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

【问题讨论】:

标签: c# .net colors


【解决方案1】:

我不知道内置函数会帮助你,但你可以自己做。

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

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

【讨论】:

    【解决方案2】:

    您要查找的内容称为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 );
    

    您必须通过从AbstractInterpolationProvider&lt;Color, double&gt; 扩展来实现ColorInterpolationProvider,但这很简单,可以在in my blog post 找到更多信息。

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

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2014-02-18
      • 2012-11-27
      • 2012-02-06
      • 2019-12-07
      相关资源
      最近更新 更多