* Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV * * @param color RGBA color as an array [0-255, 0-255, 0-255, 0-1]
(rgba)
| 151 | |
| 152 | |
| 153 | function RGBAtoHSVA(rgba) { |
| 154 | if (!rgba) return { |
| 155 | h: 0, |
| 156 | s: 1, |
| 157 | v: 1, |
| 158 | a: 1 |
| 159 | }; |
| 160 | var r = rgba.r / 255; |
| 161 | var g = rgba.g / 255; |
| 162 | var b = rgba.b / 255; |
| 163 | var max = Math.max(r, g, b); |
| 164 | var min = Math.min(r, g, b); |
| 165 | var h = 0; |
| 166 | |
| 167 | if (max !== min) { |
| 168 | if (max === r) { |
| 169 | h = 60 * (0 + (g - b) / (max - min)); |
| 170 | } else if (max === g) { |
| 171 | h = 60 * (2 + (b - r) / (max - min)); |
| 172 | } else if (max === b) { |
| 173 | h = 60 * (4 + (r - g) / (max - min)); |
| 174 | } |
| 175 | } |
| 176 | |
| 177 | if (h < 0) h = h + 360; |
| 178 | var s = max === 0 ? 0 : (max - min) / max; |
| 179 | var hsv = [h, s, max]; |
| 180 | return { |
| 181 | h: hsv[0], |
| 182 | s: hsv[1], |
| 183 | v: hsv[2], |
| 184 | a: rgba.a |
| 185 | }; |
| 186 | } |
| 187 | |
| 188 | function HSVAtoHSLA(hsva) { |
| 189 | var h = hsva.h, |