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+
132/**
233 * @param {number } red - Red component 0..1
334 * @param {number } green - Green component 0..1
435 * @param {number } blue - Blue component 0..1
536 * @return {number[] } Array of HWB values: Hue as degrees 0..360, Whiteness and Blackness in reference range [0,100]
637 */
738function rgbToHwb ( red , green , blue ) {
8- var hsl = rgbToHsl ( red , green , blue ) ;
39+ var hue = rgbToHue ( red , green , blue ) ;
940 var white = Math . min ( red , green , blue ) ;
1041 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