路径梯度在WPF
本文关键字:WPF 路径 | 更新日期: 2023-09-27 17:49:14
我试图在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到π之间,线性梯度0xFF到0x00 BLUE在0到π/3和π到4π/3之间。
0xFF GREEN在π到5π/3之间,线性梯度0xFF到0x00 GREEN在2π/3到π和4π/3到0之间。
换句话说,就是HSV色轮。
我创建了三个重叠的渐变,彼此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>