2011-03-25 5 views
8

System.Media.Colors의 색상을 표시된 스펙트럼의 위치에 따라 정렬하는 가장 빠르고 쉬운 방법 (빨강에서 파랑 또는 파랑에서 빨강까지 ' t 문제)?System.Media.Colors를 가시 스펙트럼의 위치에 따라 정렬

EDIT :

enter image description here

이것은 아마도 기술적으로 정확하지만 여전히 시각적으로 아니다 : 여기

소트 (hue-> 채도 -> 밝기)의 결과이다. 문제가 무엇인지 밝히는 사람이있을 수 있습니까?

+0

1 차원 순서로 연속적으로 3 차원 (색) 공간을 표현하는 것은 불가능합니다. 정확히 당신이 성취하고자하는 것은 무엇입니까? –

+0

글쎄 고마워요. 그게 정확히 내가 알아야 할 것. 나는 그렇지 않다고 생각했다. – NVM

답변

4

색상별로 색을 분류하고 싶습니다. 그렇게하기 위해서는 색상의 색조를 계산해야하며 Wpf System.Media.Color 구조체에는 해당 작업을 수행 할 수있는 속성이 없습니다.

당신은 두 가지 옵션을했습니다 :

  • 수동으로 색상을 계산할 수 있습니다. 이것은 정말로 어렵지는 않지만 지저분합니다. if-then 문이 많이 있습니다. 이 코드 예제는 can be found on devx입니다. 이것은 더 많은 일을하고 덜 읽을 수 있지만 더 빠른 옵션 일 것입니다.
  • System.Drawing.Color.GetHue을 사용할 수 있습니다. 구형 winforms-era System.Drawing 색 구조는 색조 계산을 지원합니다. 따라서 코드가 정말 간단 해집니다. System.Drawing.Color.FromArgb(col.R, col.G, col.B).GetHue()과 같은 것으로 충분합니다. 멋지고 짧습니다! 그러나 동일한 이름을 가진 두 개의 구조체를 처리하게 될 것이므로 당연히 System.Drawing.dll 어셈블리를 참조해야합니다. 이러한 종류의 메소드는 속도가 느려지고 온 전성 검사를 많이하는 경향이 있습니다. 따라서 성능이 중요하다면 이는 덜 매력적일 수 있습니다.

색 공간은 3 차원입니다. 한 방향 (예 : 색조)을 따라 정렬 할 수 있지만 다른 두 방향 (HSB 모델의 채도 및 밝기)을 일정하게 유지하면 결과로 나타나는 색상 시퀀스가 ​​연속으로 나타납니다. 이것이 대부분의 색상 선택기가 2 차원 표현을 선택하는 이유입니다. 그렇더라도 연속 그라디언트를 유지하려면 지정된 색상 선택기 내에서 하나의 치수를 일정하게 유지해야합니다.

+0

Mono에서 GetHue 코드를 "간단히 빌려"확장 메서드를 만들 수 있다고 덧붙일 것입니다. 그가하는 일의 유일한 문제는 계산 된 열을 정렬한다는 것입니다 (예, 조숙 한 최적화 임). – xanatos

+0

잘 작동하지만 완전히 아닙니다. 대답으로 표시를 취소하십시오. – NVM

+0

글쎄, 내 질문에 답을한다. 나는 불가능한 것을 시도하고 있었지만! – NVM

관련 문제