2016-06-23 15 views
1

Ich versuche, ein Vektor-Grafik-Farbrad in WPF zu erstellen. Ich berechne momentan die Positionen und Farben von Hunderten von Dreiecken und fülle sie mit dem durchschnittlichen Farbwert ihrer Ecken.Pfad Gradient in WPF

Ich würde es vorziehen, so etwas wie diese Lösung von WinForms zu tun: http://csharphelper.com/blog/2014/08/fill-a-polygon-with-a-pathgradientbrush-in-c/

Gibt es eine Möglichkeit, dies in WPF zu erreichen?

bearbeiten Ende Ziel zu klären: Ich brauche eine Steigung, die 0xFF RED zwischen -π/3 & pgr;/3 und linearen Gradienten 0xFF auf 0x00 RED von -π/3 bis -2π/3 und π ist/3 bis 2 & pgr;/3.

0xFF BLAU zwischen π/3 bis π und linearer Verlauf 0xFF bis 0x00 BLAU von 0 bis π/3 und π bis 4π/3.

0xFF GREEN zwischen π/3 bis 5n und linearen Gradienten 0xFF auf 0x00 GREEN von 2π/3 bis π und 4π/3 auf 0

In anderen Worten, ein HSV-Farbrad.

Antwort

0

Ich habe drei überlappende Gradienten, 120 Grad voneinander erstellt, um dies zu erhalten. Vielleicht möchten Sie einige Parameter zwicken:

Bitte beachten Sie, dass das genaue Bild in der Verknüpfung sechs von ihnen erfordert, auch mit sekundären Farben.

<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

Der letzte Gradienten rendert über die ersten. Das ist nicht der gewünschte Effekt. Es scheint auch keine Mischmoduseigenschaft für Farbverlaufstypen zu geben, um Abhilfe zu schaffen. –

+0

Sie haben Recht. Ich sehe, dass dies daran liegt, dass meine Probe Alpha nur über den Radius hinweg mischt. Es sollte auch Alpha zu angrenzenden Farben mischen, um das gewünschte Muster zu erhalten. – motdotnet

+0

Das ist ein bisschen mehr beteiligt. Ich werde versuchen, eine aktualisierte Probe zu veröffentlichen. – motdotnet