2016-06-23 4 views
1

Я пытаюсь создать векторное колесо цвета в WPF. В настоящее время я вычисляю позиции и цвета сотен треугольников и заполняя их средним значением цвета их углов.Путь Градиент в WPF

Я бы предпочел, чтобы сделать что-то вроде этого раствора из WinForms: http://csharphelper.com/blog/2014/08/fill-a-polygon-with-a-pathgradientbrush-in-c/

Есть ли способ сделать это в WPF?

Редактировать уточнить конечную цель: мне нужен градиент, который 0xFF RED между -π/3 я/3, и линейный градиент 0xFF в 0x00 RED от -л/3 к -2π/3 и π/3 до 2π/3.

0xFF BLUE между π/3 to π и линейным градиентом 0xFF до 0x00 BLUE от 0 до π/3 и π до 4π/3.

0xFF ЗЕЛЕНЫЙ между я к 5я/3, и линейным градиентом 0xFF в 0x00 GREEN от 2л/3 до π и 4π/3 до 0.

В других случаях, цвет краски колеса ВПГ.

ответ

0

Я создал три пересекающихся градиента, 120 градусов друг от друга, чтобы получить это. Вы можете настроить некоторые параметры:

Обратите внимание, что точное изображение в ссылке потребует шесть из них, используя вторичные цвета.

<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

Смежные вопросы