作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试根据调色板绘制 WPF 控件的背景,其中每种颜色都已分配了值(例如红色 = 0、深绿色 = 10、绿色 = 20、浅绿色 =30)和用户选择的值(例如25) 这将给出最终的颜色。我希望生成的颜色是 2 个最接近的颜色值之间的插值(例如,对于 25 的值,它应该给出绿色和浅绿色之间的颜色)
为此,我正在考虑在 WPF 中使用现有的 LinearGradientBrush;设置 GradientStops、offsets 并获得指定值的颜色。有没有办法做到这一点,或者我应该实现自己的颜色插值函数?
谢谢。
最佳答案
使用 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 整除,则查找开始和结束颜色的逻辑会稍微复杂一些。
关于WPF 颜色插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/790699/
我是一名优秀的程序员,十分优秀!