代码之家  ›  专栏  ›  技术社区  ›  Camilo Martin

如何更改gdi+LinearGradientBrush的颜色?

  •  2
  • Camilo Martin  · 技术社区  · 14 年前

    我必须写几个小的垂直梯度(在一个循环上),所以我认为重新使用现有的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 回复  |  直到 14 年前
        1
  •  2
  •   Steve    14 年前

    与用刷子实际绘制东西的工作相比,构建刷子几乎不需要花费任何费用。

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

    myBrush.LinearColors = new Color[2] { Color.Blue, Color.Whatever };
        2
  •  1
  •   Bob Sammers 15ee8f99-57ff-4f92-890c-b56153    14 年前

    这可能是学术性的(回顾起来,这其中的大部分很明显!)但是,改变一种颜色不起作用的原因是,这些颜色是在呈现给您之前从非托管代码中提取出来的-您将得到一个颜色的副本,这就是您要改变的内容。或者,更正式地说,语句中的L值是按值传递的,并且没有更新原始值的机制。

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