2016-02-12 103 views
1

我想创建一个像MSVS 2013画笔编辑器一样的渐变画笔编辑器。创建一个wpf渐变画笔编辑器。 (RGB颜色到HSL/HSV)

我用下面的代码,使我的编辑

<VisualBrush x:Key="MyBrush" TileMode="None"> 
     <VisualBrush.Visual> 
      <Canvas Background="Black" Width="1" Height="1" > 
       <Rectangle Width="1" Height="1" > 
        <Rectangle.Fill> 
         <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"> 
          <LinearGradientBrush.GradientStops> 
           <GradientStop Color="White" Offset="0" /> 
           <GradientStop Color="{Binding ElementName=picker,Path=SelectedColour}" Offset="1" /> 
          </LinearGradientBrush.GradientStops> 
         </LinearGradientBrush> 
        </Rectangle.Fill> 
        <Rectangle.OpacityMask> 
         <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
          <LinearGradientBrush.GradientStops> 
           <GradientStop Color="#FFFFFFFF" Offset="0"/> 
           <GradientStop Color="#00FFFFFF" Offset="1"/> 
          </LinearGradientBrush.GradientStops> 
         </LinearGradientBrush> 
        </Rectangle.OpacityMask> 
       </Rectangle> 
      </Canvas> 
     </VisualBrush.Visual> 
    </VisualBrush> 

请参阅下面的图片,并回答了我的问题

UPDATE:

我意识到,我应该RGB转换为HSV。

RGB to HSV formula

+2

Y轴是颜色的亮度,X轴是饱和度。您需要将RGB颜色转换为HSL(色调,饱和度,亮度),然后使用这些值绘制(x,y)。请参考:http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/ – Mangist

+0

@Mangist谢谢,请发表您的评论作为答案,并告诉我如何获得X和Y来自HSL价值。 –

回答

2

如果你看过我给你的文章,你会看到如何让X(饱和%)和Y(亮度%)。它们以百分比表示,您可以根据颜色框的宽度绘制该圆。因此,如果广场是200x200像素,你的饱和度为45%,那么你将绘制X = 90。如果亮度为60%,那么你将绘制Y = 120

的XAML:

<Path Stroke="White" StrokeThickness="2" Fill="Red" > 
    <Path.Data> 
     <EllipseGeometry 
      Center="{Binding Path=CenterPoint}" 
      RadiusX="5" 
      RadiusY="10" /> 
    </Path.Data> 
</Path> 

查看模型:

public Point CenterPoint 
{ 
    get { return new Point(Lightness, Saturation); } 
} 

您需要填写详细信息以将RGB颜色转换为HSL。

+0

aha,非常感谢! (编辑问题的标题) –