c# 颜色RGB到HSB互相转换

0
0
0
1. 云栖社区>
2. 博客>
3. 正文

## c# 颜色RGB到HSB互相转换

```  1 /// <summary>
2         /// 色相，饱和度，亮度转换成rgb值
3         /// </summary>
4         /// <returns></returns>
5         public static float[] HSB2RGB(float[] hsb)
6         {
7             if (hsb[0] == 360)
8             {
9                 hsb[0] = 0;
10             }
11             float[] rgb = new float[3];
12             float r = 0;
13             float g = 0;
14             float b = 0;
15
16             if (hsb[1] == 0)
17             {
18                 r = g = b = hsb[2];
19             }
20             else
21             {
22                 float sectorPos = hsb[0] / 60f;
23                 int sectorNum = (int)Math.Floor(sectorPos);
24                 float fractionalSector = sectorPos - sectorNum;
25                 float p = hsb[2] * (1 - hsb[1]);
26                 float q = hsb[2] * (1 - (hsb[1] * fractionalSector));
27                 float t = hsb[2] * (1 - (hsb[1] * (1 - fractionalSector)));
28                 switch (sectorNum)
29                 {
30                     case 0:
31                         r = hsb[2];
32                         g = t;
33                         b = p;
34                         break;
35                     case 1:
36                         r = q;
37                         g = hsb[2];
38                         b = p;
39                         break;
40                     case 2:
41                         r = p;
42                         g = hsb[2];
43                         b = t;
44                         break;
45                     case 3:
46                         r = p;
47                         g = q;
48                         b = hsb[2];
49                         break;
50                     case 4:
51                         r = t;
52                         g = p;
53                         b = hsb[2];
54                         break;
55                     case 5:
56                         r = hsb[2];
57                         g = p;
58                         b = q;
59                         break;
60                 }
61
62             }
63             return new float[] { r * 255, g * 255, b * 255 };
64         }
65         /// <summary>
66         /// 将rgb类型的颜色转换为hsb
67         /// </summary>
68         /// <param name="rgb"></param>
69         /// <returns></returns>
70         public static float[] RGB2HSB(float[] rgb)
71         {
72             float[] hsb = new float[3];
73             float r = rgb[0];
74             float g = rgb[1];
75             float b = rgb[2];
76
77             float max = Math.Max(r, Math.Max(g, b));
78             if (max <= 0)
79             {
80                 return hsb;
81             }
82             float min = Math.Min(r, Math.Min(g, b));
83             float dif = max - min;
84             if (max > min)
85             {
86                 if (g == max)
87                 {
88                     hsb[0] = (b - r) / dif * 60f + 120f;
89                 }
90                 else if (b == max)
91                 {
92                     hsb[0] = (r - g) / dif * 60f + 240f;
93                 }
94                 else if (b > g)
95                 {
96                     hsb[0] = (g - b) / dif * 60f + 360f;
97                 }
98                 else
99                 {
100                     hsb[0] = (g - b) / dif * 60f;
101                 }
102                 if (hsb[0] < 0)
103                 {
104                     hsb[0] = hsb[0] + 360f;
105                 }
106             }
107             else
108             {
109                 hsb[0] = 0;
110             }
111             hsb[1] = dif / max;
112             hsb[2] = max / 255f;
113             return hsb;
114         }```

+ 关注

corcosa 13629人浏览