将IEnumerable <color>转换为画笔

时间:2017-03-27 09:20:51

标签: wpf colors system.drawing brush

我有一个IEnumerable of Color,我想用它作为画笔的基础。

目前,我将IEnumerable转换为Bitmap,转换为bitmapsource,转换为画笔,但这有点慢,是否有任何刷类可以更快地完成我想要的操作?

编辑,我想要做的事情:使用笔刷在绘图视觉中绘制一条线,其中IEnumerable of Color用作线条颜色。如果我有一个{Colours.Green,Colours.Red}的集合,我希望生成的线条为半绿色,半红色。

1 个答案:

答案 0 :(得分:0)

这是一个将IEnumerable转换为LinearGradientBrush的方法。 每种颜色都有2个渐变色标,以便在颜色之间创建硬转换,而不是渐变。

LinearGradientBrush CreateBrush(IEnumerable<Color> colors) {

    var colorArray = colors.ToArray();
    var step = 1.0 / colorArray.Length;

    var gradientStops = new GradientStopCollection();

    for (int i = 0; i < colorArray.Length; i++) {
        var color = colorArray[i];
        gradientStops.Add(new GradientStop(color, i * step));
        gradientStops.Add(new GradientStop(color, (i + 1) * step));
    }

    return new LinearGradientBrush(gradientStops);
}