문제

나는 WPF와 놀기 시작했고 그리기를 원했다 컬러 휠 형식에.

처음에 나는 다음과 같이 arcsegment에서 lineargradientbrush를 사용하려고했습니다.

<Path StrokeThickness="35" Height="150" Width="150">
    <Path.Stroke>
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
            <GradientStop Color="Red" Offset="0.15" />
            <GradientStop Color="Orange" Offset="0.2" />
            <GradientStop Color="Yellow" Offset="0.35" />
            <GradientStop Color="Green" Offset="0.5" />
            <GradientStop Color="Blue" Offset="0.65" />
            <GradientStop Color="Indigo" Offset="0.75" />
            <GradientStop Color="Violet" Offset="0.9" />
        </LinearGradientBrush>
    </Path.Stroke>
    <Path.Data>
        <PathGeometry >
            <PathFigure IsClosed="True" StartPoint="25,70">
                <ArcSegment Point="25,71" IsLargeArc="True"
                    Size="50,50" SweepDirection="Clockwise" />
            </PathFigure>
        </PathGeometry>
    </Path.Data>
</Path>

그라디언트가 여전히 수평 이었기 때문에 실패했습니다.

또 다른 아이디어는 그라디언트를 적용한 후 어떻게 든 줄을 구부려 야하는 것입니다. 그러나 나는 적절한 변형을 찾을 수 없습니다.

표준 변환이없는 경우 사용자 정의 변환을 만들 수 있습니까? 아니면 픽셀로 컬러 휠을 그려야합니까?

모든 아이디어.

도움이 되었습니까?

해결책

이 라이브러리에는 컬러 휠을 그리는 픽셀 셰이더가 있습니다

샘플 XAML :

<Ellipse Width="300"
         Height="300"
         Fill="White">
    <Ellipse.Effect>
        <effects:HsvWheelEffect />
    </Ellipse.Effect>
</Ellipse>

타원에는 브러시가 설정되어 있어야합니다. Fill 이것이 작동하려면 어떤 색이든 될 수 있습니다.

다른 팁

Silverlight의 또 다른 예는 다음과 같습니다. http://asyrovprog.host22.com/colorwheel.html. 소스 코드는 여기에 있습니다 : timeline.codeplex.com BSD 라이센스에 따라.

당신이 찾고있는 것은 경로 구배 브러시. 안타깝게도 아직 WPF에서는 사용할 수 없습니다 (그러나 GDI+). 아마도 미래 버전에서 ...

대략적인 컬러 휠을 얻는 방법에 대한 아이디어가 있습니다.

그것에 대한 높은 수준의 설명은 회전 및 번역 된 선형 그라디언트 (사각형)를 사용하여 두께가 원하는 링 너비보다 훨씬 더 넓은 일반 다각형을 만듭니다. 그런 다음 링 모양을 "잘라 내고"컬러 휠로 사용하십시오.

컬러 휠에는 몇 가지 주요 색상 (빨간색, 녹색, 파란색, 노란색 등)이 있습니다. 먼저 임의의 기본 라인에서 학위 측정을 정의해야합니다. 예를 들어, 빨간색은 0 라디안이고 파란색은 PI 라디안에 있습니다. 링의 내부 및 외부 반경도 정의합니다. Trig를 사용하면 시작한 색상에서 다음 인접한 색상까지 선형 그라디언트가있는 링 드로잉 사각형을 걸어 다닙니다. 직사각형의 너비는 링의 너비보다 커야하고 (나중에 이유를 알게 될 것인지) 사각형은 중간 점의 원으로 접하는 것이기 위해 회전해야합니다.

완료되면 "컬러 다각형"(방금 구성된 용어)이 있습니다. 그런 다음 쿠키 커터가 반죽으로하는 것처럼이 다각형에서 링 모양을 추출합니다. 이를 수행하는 방법이 여러 개있을 것입니다. 배경이있는 중앙에서 내부 반경으로 채워진 원을 그리는 것만으로도 중간 부분이 제거됩니다. 바깥 부분이 더 어려울 것입니다. WPF 에서이 작업을 수행 할 수 있는지 모르겠지만,해야 할 일은 중앙에서 링의 바깥 쪽 가장자리까지 원인 마스크를 생성하는 것입니다. 검은 배경의 흰색 원일 것입니다. 그런 다음 다각형의 외부를 제거하기 위해 이미지와 함께 "그리고"당신은 "그리고"이미지와 함께 ".

완벽하지는 않지만 합리적으로 보일 것입니다. 많은 트리그!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top