Win10手记-取色器ColorPicker的实现

您所在的位置:网站首页 win10取色器工具 Win10手记-取色器ColorPicker的实现

Win10手记-取色器ColorPicker的实现

#Win10手记-取色器ColorPicker的实现| 来源: 网络整理| 查看: 265

最近个人项目需要用到ColorPicker,但是适用于WinRT和Win10的基本没用,所以只能自己造轮子了。

 

平台环境

 

Windows 10Visual Studio 2015

 

思路

 

确定需求后,我查找了各方信息,发现PhotoShop的ColorPicker最符合我的需求,这里我们实现的仿PhotoShop HSB取色器,样式如下图。

 

 

确定目标后,则需要研究具体的调色原理了。我们都知道,程序使用的一般都是RGB颜色,而这里使用的则是HSB颜色。顾名思义,HSB分别是指色相(Hue)纯度(Saturation)明度(Brightness),这三个参数构成了HSB颜色,这比RGB颜色更易于选取,能够同时提供的颜色种类最多,对应HSV。色相可以通过色环来表示,HSB三个参数均和RGB保持着数学上的关系。详细信息可见于维基百科:https://en.wikipedia.org/wiki/HSL_and_HSV

 

 

这里计算流程为先计算色相,然后固定亮度,最后计算饱和度。首先对于色相,计算相对简单,分析色环,即可发现处于不同度数区间对应的RGB值也是有规律的。

 

具体来说假定HSB值为(H,100%,100%)条件下,RGB值对应关系如下:

 

                  H         Color     Value

 

              -----------------------------

 

               0-60         G       0->255

 

               60-120      R       255->0

 

               120-180    B       0->255

 

               180-240    G       255->0

 

               240-360    R       0->255

 

               300-360    B       255->0

 

接下来根据饱和度S来进一步计算出RGB,此时假定条件为(H,S,100%),计算公式如下:

r"= r'+ (255 - r') * s

g"= g'+ (255 - g') * s b"= b'+ (255 - b') * s

其中r',g',b'分别为第一步计算出的RGB结果。

 

最后一步,亮度L值与RGB关系最简单,RGB只需要分别乘以亮度即可。

 

实现代码

 

核心计算类CWColorService

复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Windows.UI; namespace CWColorPicker.Core { public class CWColorService { /// /// Convert HSB value to RGB value /// /// HSB value /// RGB value public static int[] HSBToRGB(float[] hsb) { var rgb = new float[3]; var hValue = hsb[0]; /* Firstly, we need to calculate RGB value, when the HSB value is (h,100%,100%). H Color Value ---------------------------- 0-60 G 0->255 60-120 R 255->0 120-180 B 0->255 180-240 G 255->0 240-360 R 0->255 300-360 B 255->0 */ if (hValue


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3