1
+ /**
2
+ * @param {number } red - Red component 0..1
3
+ * @param {number } green - Green component 0..1
4
+ * @param {number } blue - Blue component 0..1
5
+ * @return {number } Hue as degrees 0..360
6
+ */
7
+ function rgbToHue ( red , green , blue ) {
8
+ // Similar to rgbToHsl, except that saturation and lightness are not calculated, and
9
+ // potential negative saturation is ignored.
10
+ let max = Math . max ( red , green , blue ) ;
11
+ let min = Math . min ( red , green , blue ) ;
12
+ let hue = NaN ;
13
+ let d = max - min ;
14
+
15
+ if ( d !== 0 ) {
16
+ switch ( max ) {
17
+ case red : hue = ( green - blue ) / d + ( green < blue ? 6 : 0 ) ; break ;
18
+ case green : hue = ( blue - red ) / d + 2 ; break ;
19
+ case blue : hue = ( red - green ) / d + 4 ;
20
+ }
21
+
22
+ hue *= 60 ;
23
+ }
24
+
25
+ if ( hue >= 360 ) {
26
+ hue -= 360 ;
27
+ }
28
+
29
+ return hue ;
30
+ }
31
+
1
32
/**
2
33
* @param {number } red - Red component 0..1
3
34
* @param {number } green - Green component 0..1
4
35
* @param {number } blue - Blue component 0..1
5
36
* @return {number[] } Array of HWB values: Hue as degrees 0..360, Whiteness and Blackness in reference range [0,100]
6
37
*/
7
38
function rgbToHwb ( red , green , blue ) {
8
- var hsl = rgbToHsl ( red , green , blue ) ;
39
+ var hue = rgbToHue ( red , green , blue ) ;
9
40
var white = Math . min ( red , green , blue ) ;
10
41
var black = 1 - Math . max ( red , green , blue ) ;
11
- return ( [ hsl [ 0 ] , white * 100 , black * 100 ] ) ;
12
- }
42
+ return ( [ hue , white * 100 , black * 100 ] ) ;
43
+ }
0 commit comments