blob: d42c203112379bc190628cf29678bac10803f85c [file] [log] [blame]
dojo.provide("dojo.gfx.color.hsv");
dojo.require("dojo.lang.array");
dojo.require("dojo.math");
dojo.lang.extend(dojo.gfx.color.Color,{toHsv:function(){
return dojo.gfx.color.rgb2hsv(this.toRgb());
}});
dojo.gfx.color.rgb2hsv=function(r,g,b,_4){
if(dojo.lang.isArray(r)){
if(g){
_4=g;
}
b=r[2]||0;
g=r[1]||0;
r=r[0]||0;
}
var _5={inputRange:(_4&&_4.inputRange)?_4.inputRange:255,outputRange:(_4&&_4.outputRange)?_4.outputRange:[255,255,255]};
var h=null;
var s=null;
var v=null;
switch(_5.inputRange){
case 1:
r=(r*255);
g=(g*255);
b=(b*255);
break;
case 100:
r=(r/100)*255;
g=(g/100)*255;
b=(b/100)*255;
break;
default:
break;
}
var _9=Math.min(r,g,b);
v=Math.max(r,g,b);
var _a=v-_9;
s=(v==0)?0:_a/v;
if(s==0){
h=0;
}else{
if(r==v){
h=60*(g-b)/_a;
}else{
if(g==v){
h=120+60*(b-r)/_a;
}else{
if(b==v){
h=240+60*(r-g)/_a;
}
}
}
if(h<=0){
h+=360;
}
}
switch(_5.outputRange[0]){
case 360:
break;
case 100:
h=(h/360)*100;
break;
case 1:
h=(h/360);
break;
default:
h=(h/360)*255;
break;
}
switch(_5.outputRange[1]){
case 100:
s=s*100;
case 1:
break;
default:
s=s*255;
break;
}
switch(_5.outputRange[2]){
case 100:
v=(v/255)*100;
break;
case 1:
v=(v/255);
break;
default:
break;
}
h=dojo.math.round(h);
s=dojo.math.round(s);
v=dojo.math.round(v);
return [h,s,v];
};
dojo.gfx.color.hsv2rgb=function(h,s,v,_e){
if(dojo.lang.isArray(h)){
if(s){
_e=s;
}
v=h[2]||0;
s=h[1]||0;
h=h[0]||0;
}
var _f={inputRange:(_e&&_e.inputRange)?_e.inputRange:[255,255,255],outputRange:(_e&&_e.outputRange)?_e.outputRange:255};
switch(_f.inputRange[0]){
case 1:
h=h*360;
break;
case 100:
h=(h/100)*360;
break;
case 360:
h=h;
break;
default:
h=(h/255)*360;
}
if(h==360){
h=0;
}
switch(_f.inputRange[1]){
case 100:
s/=100;
break;
case 255:
s/=255;
}
switch(_f.inputRange[2]){
case 100:
v/=100;
break;
case 255:
v/=255;
}
var r=null;
var g=null;
var b=null;
if(s==0){
r=v;
g=v;
b=v;
}else{
var _13=h/60;
var i=Math.floor(_13);
var f=_13-i;
var p=v*(1-s);
var q=v*(1-(s*f));
var t=v*(1-(s*(1-f)));
switch(i){
case 0:
r=v;
g=t;
b=p;
break;
case 1:
r=q;
g=v;
b=p;
break;
case 2:
r=p;
g=v;
b=t;
break;
case 3:
r=p;
g=q;
b=v;
break;
case 4:
r=t;
g=p;
b=v;
break;
case 5:
r=v;
g=p;
b=q;
break;
}
}
switch(_f.outputRange){
case 1:
r=dojo.math.round(r,2);
g=dojo.math.round(g,2);
b=dojo.math.round(b,2);
break;
case 100:
r=Math.round(r*100);
g=Math.round(g*100);
b=Math.round(b*100);
break;
default:
r=Math.round(r*255);
g=Math.round(g*255);
b=Math.round(b*255);
}
return [r,g,b];
};