2017-03-27 6 views
-1

브러시의 기초로 사용하려는 Color의 IEnumerable을 가지고 있습니다.IEnumerable <Color>을 브러시로 변환하십시오.

현재로서는 IEnumerable을 비트 맵으로 변환하여 이미지 브러시로 비트 맵으로 변환하지만 조금 느리다. 원하는대로 빠르게 할 수있는 브러시 클래스가 있습니까?

편집, 할 일 : 펜의 브러시를 사용하여 색의 IEnumerable이 선 색으로 사용되는 선을 그림 그리기 시각에 그리십시오. {Colours.Green, Colours.Red}의 콜렉션을 가지고 있다면 결과 라인을 반쯤 녹색으로, 그리고 절반은 빨간색으로 바꾸기를 원합니다.

+0

"내가 원하는대로 빠르게 할 수있는 브러시 클래스가 있습니까?" 너는 무엇을하고 싶은지 결코 말하지 마. – MikeT

+0

죄송합니다, 받아들입니다. 좀 더 명확하게하기 위해 질문을 업데이트했습니다. – Nattfrosten

+1

당신이 원하는 것은 LinearGradientBrush입니다. – wilford

답변

0

다음은 IEnumerable을 LinearGradientBrush로 변환하는 방법입니다. 그라디언트가 아닌 색상 간의 하드 전환을 만들기 위해 각 색상에 2 개의 그라데이션 중지가 있습니다.

LinearGradientBrush CreateBrush(IEnumerable<Color> colors) { 

    var colorArray = colors.ToArray(); 
    var step = 1.0/colorArray.Length; 

    var gradientStops = new GradientStopCollection(); 

    for (int i = 0; i < colorArray.Length; i++) { 
     var color = colorArray[i]; 
     gradientStops.Add(new GradientStop(color, i * step)); 
     gradientStops.Add(new GradientStop(color, (i + 1) * step)); 
    } 

    return new LinearGradientBrush(gradientStops); 
}