This repository has been archived by the owner on Sep 24, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
HSVColorSpace.js
93 lines (86 loc) · 2 KB
/
HSVColorSpace.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* ColorSpace utils
*/
module.exports = {
/**
* HSV convert to RGB
* @param {number} [h=0.0] - Hue of HSV, 0.0~1.0
* @param {number} [s=0.0] - Saturation(Chroma) of HSV, 0.0~1.0
* @param {number} [v=0.0] - Value(Brightness) of HSV 0.0~1.0
* @returns {array} [r,g,b] r:0.0~1.0, g:0.0~1.0, b:0.0~1.0
*/
hsvToRgb: ( h, s, v )=>{
if( typeof h === "undefined" ) h = 0;
if( typeof s === "undefined" ) s = 0;
if( typeof v === "undefined" ) v = 0;
var r=v,g=v,b=v;
if (s > 0.0) {
h *= 6.0;
var i = h << 0;
var f = h - i;
switch (i) {
default:
case 0:
g *= 1 - s * (1 - f);
b *= 1 - s;
break;
case 1:
r *= 1 - s * f;
b *= 1 - s;
break;
case 2:
r *= 1 - s;
b *= 1 - s * (1 - f);
break;
case 3:
r *= 1 - s;
g *= 1 - s * f;
break;
case 4:
r *= 1 - s * (1 - f);
g *= 1 - s;
break;
case 5:
g *= 1 - s;
b *= 1 - s * f;
break;
}
return [r,g,b];
}
return [v, v, v];
},
/**
* RGB Convert to HSV
* @param {number} [r=0.0] - Red 0.0~1.0
* @param {number} [g=0.0] - Green 0.0~1.0
* @param {number} [b=0.0] - Blue 0.0~1.0
* @return {array} [h,s,v] h:0.0~1.0, s:0.0~1.0, v:0.0~1.0
*/
rgbToHsv: ( r, g, b )=>{
if( typeof r === "undefined" ) r = 0;
if( typeof g === "undefined" ) g = 0;
if( typeof b === "undefined" ) b = 0;
var max = r > g ? r : g;
max = max > b ? max : b;
var min = r < g ? r : g;
min = min < b ? min : b;
var h = max - min;
if (h > 0.0) {
if (max == r) {
h = (g - b) / h;
if (h < 0.0) {
h += 6.0;
}
} else if (max === g) {
h = 2.0 + (b - r) / h;
} else {
h = 4.0 + (r - g) / h;
}
}
h /= 6.0;
var s = (max - min);
if (max != 0.0) s /= max;
var v = max;
return [h,s,v];
}
}