2016-06-23 15 views
1

WPF에서 벡터 그래픽 컬러 휠을 만들려고합니다. 저는 현재 수백 개의 삼각형의 위치와 색상을 계산하고 모서리의 평균 색상 값으로 채 웁니다.WPF의 경로 그라디언트

나는 윈폼에서이 솔루션처럼 뭔가를 선호 : WPF에서이 작업을 수행 할 수있는 방법이 http://csharphelper.com/blog/2014/08/fill-a-polygon-with-a-pathgradientbrush-in-c/

있습니까?

편집 최종 목표를 명확하게 : 을 나는 -π/3/3 π하고, -π/3에서 RED를 0x00으로하는 선형 구배를 0xFF가 -2π하는 사이 0xFF의 빨간색 그라데이션이 필요합니다/3 및 π/3 내지 2π/3이다.

π/3 ~ π 사이의 0xFF BLUE 및 0 ~ π/3 및 π ~ 4π/3의 선형 그래디언트 0xFF ~ 0x00 BLUE. 0에서 otherwords

에 π/3 5π하는 π, 선형 구배 2π/3 행 × 00 GREEN 행 사이에 0xFF 0xFF를

GREEN과 4π/(3), HSV 컬러 휠.

답변

0

나는 이것을 얻기 위해 서로 120 도의 그라디언트를 만들었습니다. 몇 가지 매개 변수를 조정할 수도 있습니다.

링크의 정확한 이미지에는 보조 색상을 사용하는 6 개의 이미지가 필요합니다.

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication2" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Ellipse Stroke="Black" Width="150" Height="150"> 
     <Ellipse.Fill> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#0000FF00" Offset="0.496"/> 
       <GradientStop Color="Lime" Offset="1"/> 
      </LinearGradientBrush> 
     </Ellipse.Fill> 
    </Ellipse> 
    <Ellipse Stroke="Black" Width="150" Height="150" RenderTransformOrigin="0.5,0.5"> 
     <Ellipse.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform/> 
       <RotateTransform Angle="240"/> 
       <TranslateTransform/> 
      </TransformGroup> 
     </Ellipse.RenderTransform> 
     <Ellipse.Fill> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#000000FF" Offset="0.504"/> 
       <GradientStop Color="Blue" Offset="1"/> 
      </LinearGradientBrush> 
     </Ellipse.Fill> 
    </Ellipse> 
    <Ellipse Stroke="Black" Width="150" Height="150" RenderTransformOrigin="0.5,0.5"> 
     <Ellipse.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform/> 
       <RotateTransform Angle="120"/> 
       <TranslateTransform/> 
      </TransformGroup> 
     </Ellipse.RenderTransform> 
     <Ellipse.Fill> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#00FF0000" Offset="0.504"/> 
       <GradientStop Color="Red" Offset="1"/> 
      </LinearGradientBrush> 
     </Ellipse.Fill> 
    </Ellipse> 

</Grid> 

+0

마지막 구배 제 것 위에 렌더링한다. 그것은 원하는 효과가 아닙니다. 또한이를 해결하는 데 도움이되는 그라데이션 유형에 블렌드 모드 속성이없는 것으로 나타났습니다. –

+0

당신 말이 맞아요. 내 표본이 반경 내에서만 알파를 혼합하기 때문입니다. 원하는 패턴을 얻으려면 인접한 색상에 대해 알파를 혼합해야합니다. – motdotnet

+0

그건 좀 더 복잡합니다. 업데이트 된 샘플을 게시하려고합니다. – motdotnet