function RGBtoHSV(r, g, b){ var h, s, v; var max = Math.max(r, g, b); var min = Math.min(r, g, b); if(max - min > 0) { if(g == max) { h = (b - r) / (max - min) * 60 + 120; } else if(b == max) { h = (r - g) / (max - min) * 60 + 120; } else { h = (g - b) / (max - min) * 60; } if (h < 0) h += 360; h = parseInt(h); s = parseInt((max - min) / max * 0xff); } else { h = 0; s = 0; } v = max; return Array(h, s, v); } function HSVtoRGB(h, s, v){ var r, g, b; var num1 = parseInt(v * (0xff - s) / 0xff); // 最小値 var num2 = parseInt(v * (1 - s / 0xff * (h % 60) / 60)); // 2番目の色(正の方向の場合) var num3 = parseInt(v * (1 - s / 0xff * (1 - (h % 60) / 60))); // 2番目の色(負の方向の場合) switch(parseInt(h / 60)) { case 0: r = v; g = num3; b = num1; break; case 1: r = num2; g = v; b = num1; break; case 2: r = num1; g = v; b = num3; break; case 3: r = num1; g = num2; b = v; break; case 4: r = num3; g = num1; b = v; break; default: r = v; g = num1; b = num2; break; } return Array(r, g, b); }