Как изменить цвета GDI + LinearGradientBrush? - PullRequest
2 голосов
/ 24 июля 2010

Мне нужно написать несколько небольших вертикальных градиентов (в цикле), и поэтому я считаю, что быстрее использовать существующий 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 ]

2 голосов
/ 24 июля 2010

Создание кисти практически ничего не стоит по сравнению с работой, выполняемой для рисования кисти.

Кроме того, попробуйте установить весь массив вместо замены одного элемента.

myBrush.LinearColors = new Color[2] { Color.Blue, Color.Whatever };
1 голос
/ 26 августа 2010

Возможно, это академично (и, возможно, многое из этого очевидно в ретроспективе!), Но причина, по которой изменение одного цвета не работает, заключается в том, что цвета извлекаются из неуправляемого кода перед его представлением -дали копию цвета, и это то, что вы меняете.Или, говоря более формально, l-значение в вашем выражении передается по значению, и нет механизма для обновления оригинала.

Когда вы изменяете весь градиентный массив, установщик свойств для массива записываетвозвращается к неуправляемому объекту.

...