我开始玩WPF,想在表单上绘制color wheel。
起初我尝试在ArcSegment上使用LinearGradientBrush,如下所示:
<Path StrokeThickness="35" Height="150" Width="150">
<Path.Stroke>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Color="Red" Offset="0.15" />
<GradientStop Color="Orange" Offset="0.2" />
<GradientStop Color="Yellow" Offset="0.35" />
<GradientStop Color="Green" Offset="0.5" />
<GradientStop Color="Blue" Offset="0.65" />
<GradientStop Color="Indigo" Offset="0.75" />
<GradientStop Color="Violet" Offset="0.9" />
</LinearGradientBrush>
</Path.Stroke>
<Path.Data>
<PathGeometry >
<PathFigure IsClosed="True" StartPoint="25,70">
<ArcSegment Point="25,71" IsLargeArc="True"
Size="50,50" SweepDirection="Clockwise" />
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
不成功,因为渐变仍然是水平的。
另一个想法是在应用渐变后我必须以某种方式弯曲线条。但我无法找到适当的变革。
如果没有标准变换,是否可以进行自定义变换?或者我应该按像素绘制色轮?
请提出任何想法。
答案 0 :(得分:3)
这是另一个来自silverlight的例子:http://asyrovprog.host22.com/colorwheel.html。 源代码位于:bsd license下的timeline.codeplex.com。
答案 1 :(得分:2)
您要找的是Path Gradient Brush。遗憾的是,WPF尚未提供(但它在GDI +中)。也许在未来的版本......
我确实知道如何获得近似的色轮。
对它的高级描述将使用旋转和平移的线性渐变(矩形),以形成厚度比所需环宽宽得多的正多边形。然后,您从中“切出”一个环形状并将其用作色轮。
色轮有几种主要颜色(红色,绿色,蓝色,黄色等)。您首先需要从某个任意基线定义度数测量。例如,红色为0弧度,蓝色为π弧度等。您还可以定义环的内半径和外半径。使用trig,您可以使用从开始颜色到下一个相邻颜色的线性渐变在环形绘制矩形中走动。矩形的宽度必须大于环的宽度(稍后您会看到原因),并且矩形需要旋转到与其中点的圆相切。
一旦完成,您将拥有一个“彩色多边形”(我刚刚组成的术语)。然后,您可以从这个多边形中提取一个环状形状,就像饼干切割器一样。这样做的方法不止一种。简单地从中心到内半径绘制一个填充圆圈,背景将在中间部分消失。外部部分会更加困难。我不知道你是否可以在WPF中做到这一点,但是你需要做的是生成一个从环的中心到外边缘的圆形掩模。它将是黑色背景上的白色圆圈。然后你用图像“和”它去除多边形的外部。
不完美,但我怀疑它看起来合情合理。很多三角!
答案 2 :(得分:2)
This library has pixel shaders that draw color wheels
示例xaml:
<Ellipse Width="300"
Height="300"
Fill="White">
<Ellipse.Effect>
<effects:HsvWheelEffect />
</Ellipse.Effect>
</Ellipse>
请注意,椭圆必须在Fill
上设置画笔才能使其正常工作,可以是任何颜色。