2011-09-24 5 views
2

WPF에서 12 개의 다른 브러시 색상을 생성하고 싶습니다. 처음에는 12 가지 색상을 사용할 수 있습니다. 응용 프로그램이 진화합니다. 즉, 주어진 개수에 따라 다양한 브러시 색상을 생성하고 싶습니까?런타임에 12 개의 다른 브러쉬 색상을 생성하는 방법 (12는 숫자가 다를 수 있음)

나는 그것을 조금 더 설명 할 것입니다 : A는, 예를 들어 채우기 색 할당 내가 루프 및 런타임에 만든 각 사각형의에 사각형을 만드는 오전

을 내가했다

for (i=0; i<12; i++) 
    { 
     Rectangle rect = new Rectangle(); 
     rect.Fill = <I want to assign a unique visible color>; 
     rect.Stroke = Brushes.Black; 
     rect.StrokeThickness = 1; 
    } 

답변

1

아마 필요한 것은 RGB 대 HSL 및 HSL 대 RGB 변환기입니다. 그런 다음 총 색조 (보통도 단위로 표시되지만 때때로 백분율 값)를 필요한 색상 수로 나눌 수 있습니다. 세그먼트 값만큼 색조 값을 증가 시키면 가장 차별화 된 색상이 가능합니다.

대부분의 예제는 H S 및 L 값을 제공 할 수 있으므로 WinForms Color 개체를 사용합니다. 온라인 사례가 많이 있습니다

http://www.bobpowell.net/RGBHSB.htm

how to use HSL in Asp.net

0

브러쉬 This SO question는 색상을 얻기에 도움이, 그리고 그들에게 당신이 브러쉬의 수에 대한 새로운 브러시를 만들 때마다 할당해야합니다, 색상을 할당 할 수 있습니다. 그냥 참조

:

Brush Class

Brushes class

+1

감사 SpeedBirdNine..I은 더 명확하게 내 문제를 설명하기 위해 루프 예를 들어를 추가했습니다 .. !! – VS1

0

를 사용하여 난수 생성기는 색상의 RGB 트리플 만듭니다. 목록에 저장하십시오. 그런 다음 루프를 반복 할 때 새로 생성 된 색상을 목록과 비교하여 확인하십시오. 목록에 없으면 다시 사용하십시오.

색상이 많을 때 기존 색상을 칠 확률이 높아지지만 잠재적으로 문제가 될 수 있지만 12 가지 색상의 경우에는 정상입니다.

또는 100 개의 색상 목록을 만들고 임의로 선택하면 목록에서 각 색상을 제거하십시오. 이렇게하면 충돌을 피할 수 있지만 더 많은 색상이 필요한 경우 목록을 확장해야합니다.

+0

이 방법의 문제점은 인간과 정확히 똑같이 보이는 두 색상이 약간 다른 RGB 값을 가질 수 있다고 생각합니다. – svick

+0

ChrisF, 대체 접근 방식이 100 색만로드하는 대신 더 나은 방법이라고 생각합니다. 리플렉션 또는 비슷한 방식으로 사용 가능한 모든 색상을로드하고 고유 한 색인을 할당 한 다음 각 색에 고유 한 색인을 할당 한 다음 색인을 제공하고 색을 얻을 수 있습니다. Howz, 괜찮습니까? – VS1

+0

@svick - agree. 나는 당신이 "인접한"컬러 알고리즘을 사용할 필요가 있다고 생각합니다. – ChrisF