2016-06-23 15 views
1

WPFでベクターグラフィックカラーホイールを作成しようとしています。私は現在、何百もの三角形の位置と色を計算し、それらの角の平均色値で塗りつぶしています。WPFのパス勾配

私は、WinFormsのから、このソリューションのように何かをすることを好むだろう:WPFでこれを実現する方法は http://csharphelper.com/blog/2014/08/fill-a-polygon-with-a-pathgradientbrush-in-c/

ありますか?

編集最終目標を明確にする: I/3とπを/-2πする-π/ 3からは0x00 REDへ/ 3をπに-π/ 3の間 0xFFでREDあり、勾配、および直線勾配は0xFFを必要とします3〜2π/ 3である。

π/ 3からπの間の0xFF BLUE、および0からπ/ 3およびπから4π/ 3の直線勾配0xFFから0x00までのBLUE。 0換言すれば

にπへ/ 3を5πするπ、および直線勾配2π/ 3から0x00のGREENに0xFFの間

0xFFのGREENおよび4π/ 3、HSVカラーホイール。

答えて

0

私は、これを得るために互いに120度の3つの重なり勾配を作成しました。いくつかのパラメータを調整することができます:

リンクの正確な画像には、セカンダリカラーも使用する必要があります。

<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