我正在尝试基于调色板绘制 WPF 控件的背景,其中每种颜色都分配有值(例如,红色 = 0、深绿 = 10、绿色 = 20、浅绿 = 30)和用户选择的值(例如 25)会给出最终的颜色。我希望生成的颜色是 2 个最接近的颜色值之间的插值(例如,对于 25 的值,它应该给出绿色和浅绿色之间的颜色)
为此,我正在考虑使用 WPF 中现有的 LinearGradientBrush;设置 GradientStops、偏移量并获取指定值的颜色。有没有办法做到这一点或者我应该实现自己的颜色插值函数?
Thanks.
使用 LinearGradientBrush 听起来好像会产生一些开销。虽无知识。不过,编写颜色插值函数并不难。
为简单起见,我假设您的调色板具有可被 10 整除的值。
public static Color GetColor(int value)
{
int startIndex = (value/10)*10;
int endIndex = startIndex + 10;
Color startColor = Palette[startIndex];
Color endColor = Palette[endIndex];
float weight = (value - startIndex)/(float)(endIndex - startIndex);
return Color.FromArgb(
(int)Math.Round(startColor.R * (1 - weight) + endColor.R * weight),
(int)Math.Round(startColor.G * (1 - weight) + endColor.G * weight),
(int)Math.Round(startColor.B * (1 - weight) + endColor.B * weight));
}
如果定义的颜色不能被 10 整除,则查找开始颜色和结束颜色的逻辑会稍微复杂一些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)