2010-07-23 79 views
2

我有寫一些小的垂直梯度(上環),所以我覺得它的速度更快,重新使用現有的一個LinearGradientBrush(正確嗎?)如何更改GDI + LinearGradientBrush的顏色?

但是,這不是我希望發生...

Drawing2D.LinearGradientBrush myBrush = new Drawing2D.LinearGradientBrush(new Rectangle(0, 0, 200, 200), Color.Red, Color.Black, Drawing2D.LinearGradientMode.Vertical); 
    myBrush.LinearColors[1] = Color.Blue; 
    MsgBox(myBrush.LinearColors[1].ToString); //Returns black 

那麼,有沒有無論是在上面的代碼中的錯誤,或者更好的方式來獲得一個環路上幾個垂直梯度,或以不同的方式來改變一個LinearGradientBrush的顏色嗎?

謝謝:)

回答

2

建設相比,做了實際繪製與刷東西的工作刷子成本幾乎沒有。

另外,嘗試設置整個數組而不是替換單個元素。

myBrush.LinearColors = new Color[2] { Color.Blue, Color.Whatever };
+0

因此創建一個新的LinearGradientBrush與替換顏色幾乎相同? – 2010-07-23 21:30:46

+0

我編寫了一個非常互動的零售圖形應用程序,發現使用dotTrace(我將強烈建議任何人編寫大量使用GDI +或WPF的應用程序)測量時創建新筆刷並不會顯着影響性能。 – Steve 2010-07-23 21:32:58

+0

設置整個陣列,我會用它!我以前沒有考慮過這個問題。謝謝! :) – 2010-07-23 21:39:29

1

這也許是學術(也許很大一部分是明顯回想起來!),但改變單一的顏色不工作的原因是,顏色從非託管代碼中提取呈現給前你 - 你得到了一個顏色的副本,這就是你正在改變的。或者,更正式地說,你的陳述中的價值是通過價值傳遞的,沒有更新原件的機制。

當您更改整個漸變數組時,數組的屬性設置器會將更改寫回非託管對象。

+0

感謝您的信息 - 我真的不知道這一點。現在我想到了,在數組上工作實際上是獲取數組的副本,然後處理副本。 :/ – 2010-08-27 11:44:17