WPF颜色插值

The*_*hos 2 wpf colors

我试图基于其中每种颜色已经被分配有值的调色板(例如红色= 0,深绿色= 10,绿色= 20,浅绿= 30)和一个用户选择的值来画WPF控件的背景(例如,25),该会产生颜色.我希望得到的颜色是2个最接近的颜色值之间的插值(例如,对于值25,它应该给出Green和LightGreen之间的颜色)

为此,我正在考虑在WPF中使用现有的LinearGradientBrush; 设置GradientStops,偏移量并将颜色设置为指定值.有没有办法做到这一点,还是应该实现自己的颜色插值功能?

谢谢.

Mik*_*nen 5

使用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));

}
Run Code Online (Sandbox Code Playgroud)

如果定义的颜色不能被10整除,那么找到开始和结束颜色的逻辑将会更复杂一些.