可能重复:
.NET中3种颜色之间的颜色插值
我一直在尝试使用C#获取颜色的类别列表:
Red:
255, 69, 0
255, 99, 71
etc..
Green:
0, 250, 154
143, 188, 139
etc...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直很不成功.理想情况下,我想要的是提供两个HEX refs或RGB refs并在这两个引用之间获得10种颜色的列表.这可能在C#中吗?
编辑
发现这个... http://meyerweb.com/eric/tools/color-blend/现在将js转换为c#.完成时会发布.
你在寻找什么称为插值.在这种特定情况下,您需要在两个关键点之间插入数据.
由于插值是编程时非常常见的场景,我为它编写了一个通用解决方案,可以轻松地使用线性或甚至基数样条插值在两个或多个关键点之间进行插值.
使用我的库你可以计算中间颜色如下:
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 );
Run Code Online (Sandbox Code Playgroud)
您必须ColorInterpolationProvider通过扩展来实现AbstractInterpolationProvider<Color, double>,但这非常简单,可以在我的博客文章中找到更多信息.
此示例使用Media.Color该类,但您也可以Color通过传递不同的插值提供程序来支持任何其他类.
我不知道内置的功能可以为您提供帮助,但是您可以自己完成。
只要可以使用3个数字(R,G,B)定义颜色,就可以采用两种颜色:
(R1,G1,B1)
(R2,G2,B2)
Run Code Online (Sandbox Code Playgroud)
然后将diff划分成对,并按间隔产生数字。
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;
}
Run Code Online (Sandbox Code Playgroud)
我还没有编译代码,但是您明白了。
| 归档时间: |
|
| 查看次数: |
6094 次 |
| 最近记录: |