Skip to content

Instantly share code, notes, and snippets.

@gaogao-9
Last active June 10, 2016 20:50
Show Gist options
  • Save gaogao-9/13f6a5b44492bfda20b1d15ce7f0b2c3 to your computer and use it in GitHub Desktop.
Save gaogao-9/13f6a5b44492bfda20b1d15ce7f0b2c3 to your computer and use it in GitHub Desktop.
相互変換
//RGBの情報から、HSVの情報を得る汎用メソッド
//「http://p.tl/YDI3」のJavaソースコードをJSに移植しただけです。
function GetHSVColorByRGBColor(rgb){
var hue,saturation,value;
var max = Math.max(rgb.r,rgb.g,rgb.b);
var min = Math.min(rgb.r,rgb.g,rgb.b);
//hue
if(max == min){
hue = 0;
}
else if(max == rgb.r){
hue = (((60 * (rgb.g - rgb.b) / (max - min) + 360)|0) % 360)|0;
}
else if(max == rgb.g){
hue = ((60 * (rgb.b - rgb.r) / (max - min)) + 120)|0;
}
else if(max == rgb.b){
hue = ((60 * (rgb.r - rgb.g) / (max - min)) + 240)|0;
}
//saturation
if(max == 0){
saturation = 0;
}
else{
saturation = (255 * ((max - min) / max))|0;
}
//value
value = max;
return {
h : hue,
s : saturation,
v : value
};
}
//HSVの情報から、RGBの情報を得る汎用メソッド
//「http://p.tl/YDI3」のJavaソースコードをJSに移植しただけです。
function GetRGBColorByHSVColor(hsv){
var red,green,blue;
var i,f,p,q,t;
i = (hsv.h/60|0) % 6;
f = (hsv.h/60) - (hsv.h/60|0);
p = (hsv.v*(1-(hsv.s/255))+0.5)|0;
q = (hsv.v*(1-(hsv.s/255)*f)+0.5)|0;
t = (hsv.v*(1-(hsv.s/255)*(1-f))+0.5)|0;
//このゴリ押し感、すごく闇臭いっ
//こういう変換系の処理は、とっても低レイヤーで泥臭い作業ですね(しろめ)
switch(i){
case 0 :
red = hsv.v;
green = t;
blue = p;
break;
case 1 :
red = q;
green = hsv.v;
blue = p;
break;
case 2 :
red = p;
green = hsv.v;
blue = t;
break;
case 3 :
red = p;
green = q;
blue = hsv.v;
break;
case 4 :
red = t;
green = p;
blue = hsv.v;
break;
case 5 :
red = hsv.v;
green = p;
blue = q;
break;
}
return {
r : red,
g : green,
b : blue
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment