Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建一个;“动态”;HSB颜色选择器的梯度_C#_Wpf_Colors - Fatal编程技术网

C# 创建一个;“动态”;HSB颜色选择器的梯度

C# 创建一个;“动态”;HSB颜色选择器的梯度,c#,wpf,colors,C#,Wpf,Colors,我想在WPF/C中创建一个类似于我在Photoshop中看到的颜色选择器 当我移动色调滑块时,渐变应该会更新。我首先想知道如何创建渐变,各个颜色停止应该出现在哪里,它们应该包含什么颜色值 由于梯度由 白-红 黑白 黑红色 我可以很容易地创建单个渐变,但如何创建这样的“复合”渐变 一个更简单的选择是为HSB值分别设置3个滑块 当我移动一个滑块时,另两个滑块上的颜色应该会更新。有任何链接或提示让我开始吗?我需要找到一种方法来计算其他两个滑块的颜色,因为我移动一个。当我将色调滑块从红-蓝移动时

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

当我移动色调滑块时,渐变应该会更新。我首先想知道如何创建渐变,各个颜色停止应该出现在哪里,它们应该包含什么颜色值

由于梯度由

  • 白-红
  • 黑白
  • 黑红色
我可以很容易地创建单个渐变,但如何创建这样的“复合”渐变

一个更简单的选择是为HSB值分别设置3个滑块

当我移动一个滑块时,另两个滑块上的颜色应该会更新。有任何链接或提示让我开始吗?我需要找到一种方法来计算其他两个滑块的颜色,因为我移动一个。当我将色调滑块从红-蓝移动时,饱和度和亮度应该从不饱和到饱和的红色到蓝色,从暗到浅红到蓝色

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


希望有帮助

关于梯度,我想你应该自己画。看一看

三个滑块可以这样实现:

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

请注意,渐变实际上并不是由您列出的三个部分组成。您的问题是,您仍然在考虑RGB颜色空间,这听起来像。事实上,这个正方形的全部要点是,它是从0饱和度到100%饱和度从左到右,从0亮度到100%亮度从上到下的梯度

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


我假设您已经具备将HSB颜色转换为RGB颜色的能力。如果不是的话,这应该是第一个调用点,这样做的算法应该很容易找到(如果不是大叫,我可以把它们挖出来)。

Hmm,我如何实现“创建一个正方形图像,然后计算每个像素的饱和度和亮度”这一部分我想我需要不止一个梯度。我也明白这个盒子就像你说的“从0饱和度到100%饱和度从左到右,从0亮度到100%亮度从上到下”假设饱和度和亮度从0变为1,那么如果有一个100乘100的正方形,则向右移动的每个像素的饱和度增加0.01,向下移动的每个像素的亮度增加0.01。因此,每个像素将具有色调
H
、饱和度
0.01*x
和亮度
0.01*y
的颜色。然后,在HSB空间中有一种完全特定的颜色,假设需要在RGB中进行渲染,则只需使用转换函数即可。也许我遗漏了一些关于这件事的困惑。。。