为HSB颜色选择器创建“动态”渐变

时间:2010-11-05 03:19:53

标签: c# wpf colors

我想在WPF / C#中创建一个颜色选择器,类似于我在Photoshop中看到的颜色选择器。

alt text

当我移动Hue Slider时,渐变应该更新。我想知道如何创建渐变,应该在哪里显示单个颜色以及它们应包含哪些颜色值。

由于渐变组成

,上面的内容可能更难实现
  • 白色 - 红色
  • 白色 - 黑色
  • 黑色 - 红色

我可以轻松创建单个渐变,但是如何创建这样的“复合”渐变?

更简单的替代方案是每个3个滑块用于HSB值。

alt text

当我移动一个滑块时,另一个滑块上的颜色应该更新。让我入门的任何链接或提示?当我移动一个滑块时,我需要找到一种计算颜色的方法。例如。当我从红色 - 蓝色移动Hue滑块时,饱和度和亮度应该从不饱和红色变为饱和红色到蓝色和深色到浅红色到蓝色。

3 个答案:

答案 0 :(得分:1)

http://blogs.msdn.com/b/wpfsdk/archive/2006/10/26/uncommon-dialogs--font-chooser-and-color-picker-dialogs.aspx

查看颜色选择器对话框。这应该是一个开始的好地方。

希望它有所帮助!

答案 1 :(得分:1)

关于渐变,我认为你应该自己画画。看看WriteableBitmap

三个滑块可以像这样实现:

  • 实现一个抽象的IMultivalueConverter,它将两个颜色分量值转换为渐变画笔。转换器只需获取两个颜色分量值,创建第三个未知分量值的梯度并返回它。
  • 导出三个具体转换器:HSToBGradientConverterSBToHGradientConverterBHToSGradientConverter
  • 使用相应颜色组件和转换器上的多重绑定绑定滑块轨道的背景。

答案 2 :(得分:0)

作为一个注释,渐变并不真正包含您列出的三件事。你的问题是你仍然在考虑它的RGB色彩空间。实际上,该方块的整个点是从左到右从0饱和度到100%饱和度以及从上到下0亮度到100%亮度的梯度。

我要创建一个正方形图像,然后为每个像素计算出它对应的饱和度和亮度,然后将该颜色加入(当然还有色调信息)。

我假设您已经能够将HSB颜色转换为RGB颜色。如果不是这应该是第一个调用点,并且应该很容易找到执行此操作的算法(如果没有喊叫,我可以将它们挖出来)。