2010-07-23 3 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를 만드는 것은 색상을 대체하는 것과 거의 같습니다. –

+0

필자는 매우 대화 형 소매 그래픽 응용 프로그램을 작성하여 dotTrace (GDI + 또는 WPF를 많이 사용하는 응용 프로그램 작성자에게 권장)에서 측정했을 때 새 브러시를 만들면 성능에 큰 영향을주지 않는다는 것을 알았습니다. – Steve

+0

전체 배열 설정 , 나는 그것을 사용할 것이다! 더 일찍 그것에 대해 생각하지 않기 때문에 바보. 감사! :) –

1

이 아마도 학문이다 (그리고 아마도 많은! 생각해 보면 분명하다)하지만, 작동하지 않는 하나의 색상을 변경 이유에 제출되기 전에 색상이 관리되지 않는 코드에서 추출한다는 것입니다 당신 - 당신은 색깔의 복사본이 주어지고 그것은 당신이 변화하고있는 것입니다. 또는 더 공식적으로 말하면, 진술의 l- 값은 값으로 전달되고 원본을 업데이트 할 수있는 메커니즘은 없습니다.

전체 그라디언트 배열을 변경하면 배열의 속성 설정자가 변경 내용을 관리되지 않는 개체에 다시 씁니다.

+0

정보 주셔서 감사합니다 - 나는 정말로 그것을 몰랐다. 이제는 배열에 대한 작업이 배열의 복사본을 얻은 다음 복사본을 작업하는 것이 합리적입니다. : / –