2

我必须写几个小的垂直渐变(在一个循环上),所以我认为重新使用现有的 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 颜色的不同方法?

谢谢 :)

4

2 回答 2

2

与使用画笔实际绘制某些东西所做的工作相比,构建画笔几乎不需要任何成本。

另外,尝试设置整个数组而不是替换单个元素。

myBrush.LinearColors = new Color[2] { Color.Blue, Color.Whatever };
于 2010-07-23T21:26:38.267 回答
1

这可能是学术性的(回想起来可能很明显!),但更改单一颜色不起作用的原因是颜色是在呈现给您之前从非托管代码中提取的 - 您将获得一份副本颜色,这就是你正在改变的。或者,更正式地说,您语句中的左值是按值传递的,并且没有更新原始值的机制。

当您更改整个渐变数组时,该数组的属性设置器会将更改写回非托管对象。

于 2010-08-26T09:27:35.590 回答