2017-03-27 93 views
-1

我有一個IEnumerable的Color,我想用它作爲畫筆的基礎。將IEnumerable <Color>轉換成畫筆

此刻,我將IEnumerable轉換爲位圖,轉換爲位圖源,轉換爲圖像刷,但這有點慢,是否有任何刷類能夠以更快的速度完成我想要的操作?

編輯,我想要做什麼:使用筆中的筆刷在繪圖視覺中繪製線條,其中IEnumerable的Color用作線條顏色。如果我有{Colours.Green,Colours.Red}的集合,我希望生成的線是半綠色,半紅色。

+0

「有沒有什麼刷類可以做我想要的更快的方式?」你永遠不會說你想做什麼 – MikeT

+0

對不起,點了。更新了問題,使其更加明確。 – Nattfrosten

+1

我想你想要的是一個LinearGradientBrush。 – wilford

回答

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); 
} 
相關問題