2009-05-05 76 views
6

我开始玩WPF,想在表格上画color wheel如何在WPF应用程序中绘制色轮?

起初我tryed使用一个LinearGradientBrush上ArcSegment这样的:

<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> 

失败,由于梯度还是水平。

另一个想法是我应用渐变后不得不弯曲线。但我找不到合适的转换。

如果没有标准转换可以进行自定义转换吗?还是应该按像素绘制色轮?

任何想法,请。

回答

2

你在找什么是Path Gradient Brush。可惜的是,它还不能在WPF中使用(但它在GDI +中)。也许在未来的版本...

我对如何获得一个近似的色轮有一个想法。

它的高级描述将使用旋转和平移的线性渐变(矩形)来制作厚度比所需环宽度宽得多的正多边形。然后,从中“切出”一个环形,并将其用作色轮。

色轮有几种主要颜色(红色,绿色,蓝色,黄色等)。您首先需要从一些任意的基线中定义度数测量。例如,红色为0弧度,蓝色为pi弧度等。您还可为环定义内部和外部半径。使用trig,您可以使用从开始的颜色到下一个相邻颜色的线性渐变来环绕绘制矩形。矩形的宽度必须大于环的宽度(稍后会看到为什么),并且需要将矩形旋转到与其中点处的圆相切。

一旦完成,你将有一个“彩色多边形”(我刚刚编造的一个术语)。然后,您可以从这个多边形中提取一个环形,就像曲奇切割机用面团做的一样。将有不止一种方法来做到这一点。简单地从背景中心向内半径绘制一个实心圆圈,将在中间部分摆脱。外部会更困难。我不知道你是否可以在WPF中做到这一点,但你需要做的是生成一个从环的中心到外边缘的圆圈。这将是一个黑色背景上的白色圆圈。然后用图像“与”它来摆脱多边形的外部。

不完美,但它会看起来合理我怀疑。很多触发!

3

这是silverlight的另一个例子:http://asyrovprog.host22.com/colorwheel.html。 源代码位于此处:timeline.codeplex.com根据bsd许可证。

+0

非常感谢!不幸的是,我无法观看演示,因为Silverlight 5处于测试阶段,但您的答案似乎即将被接受。 – 2011-11-30 10:16:55