6

我开始使用 WPF 并想在表单上绘制色轮。

起初我尝试在 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>

不成功,因为渐变仍然是水平的。

另一个想法是在应用渐变后我必须以某种方式弯曲线。但我找不到合适的变换。

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

请有任何想法。

4

3 回答 3

3

这是 silverlight 的另一个示例:http: //asyrovprog.host22.com/colorwheel.html。源代码位于:timeline.codeplex.com 在 bsd 许可下。

于 2011-11-26T01:11:32.950 回答
2

您正在寻找的是Path Gradient Brush。遗憾的是,它在 WPF 中尚不可用(但在 GDI+ 中)。也许在未来的版本中......

我确实有一个关于如何获得近似色轮的想法。

对它的高级描述是使用线性梯度(矩形),这些梯度被旋转和平移以形成一个正多边形,其厚度比所需的环宽度宽得多。然后,您从中“切出”一个环形并将其用作您的色轮。

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

完成后,您将拥有一个“彩色多边形”(我刚刚编造的一个术语)。然后,您可以从这个多边形中提取一个环形,就像饼干切割器对面团所做的那样。有不止一种方法可以做到这一点。只需用背景从中心到内半径绘制一个实心圆,中间部分就会消失。外面的部分会更困难。我不知道您是否可以在 WPF 中执行此操作,但您需要做的是生成一个蒙版,该蒙版是从圆环中心到外缘的圆形。这将是黑色背景上的白色圆圈。然后,您将其与图像“与”以摆脱多边形的外部。

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

于 2009-06-20T05:03:06.400 回答
2

该库具有绘制色轮的像素着色器

示例 xml:

<Ellipse Width="300"
         Height="300"
         Fill="White">
    <Ellipse.Effect>
        <effects:HsvWheelEffect />
    </Ellipse.Effect>
</Ellipse>

请注意,椭圆必须设置有刷子Fill才能使用,可以是任何颜色。

于 2017-04-23T20:04:38.117 回答