Градиент пути в 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 СИНИЙ между π / 3 до π и линейный градиент 0xFF до 0x00 СИНИЙ от 0 до π / 3 и от π до 4π / 3.

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

Другими словами, цветовое колесо HSV.

1 ответ

Я создал три перекрывающихся градиента, 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>

Другие вопросы по тегам