2010-07-23 22 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