| 216 | | var h = 0; |
|---|
| 217 | | var s = 0; |
|---|
| 218 | | var v = 0; |
|---|
| 219 | | var cmax, cmin; |
|---|
| 220 | | if(r>=g) cmax=r; else cmax=g; if(b>cmax) cmax=b; |
|---|
| 221 | | if(r<=g) cmin=r; else cmin=g; if(b<cmin) cmin=b; |
|---|
| 222 | | v=(cmax+cmin)/2; var c=cmax-cmin; |
|---|
| 223 | | if(c!=0){ |
|---|
| 224 | | if(v<=0.5) s=c/(cmax+cmin); else s=c/(2-(cmax+cmin)); |
|---|
| 225 | | if(r==cmax){ h=(g-b)/c; } |
|---|
| 226 | | else { |
|---|
| 227 | | if(g==cmax){ h=2+(b-r)/c; } |
|---|
| 228 | | else { if(b==cmax) h=4+(r-g)/c; } |
|---|
| | 216 | var h=0, s=0, v=0; |
|---|
| | 217 | var x, y; |
|---|
| | 218 | if(r>=g) x=r; else x=g; if(b>x) x=b; |
|---|
| | 219 | if(r<=g) y=r; else y=g; if(b<y) y=b; |
|---|
| | 220 | v=x; |
|---|
| | 221 | var c=x-y; |
|---|
| | 222 | if(x==0) s=0; else s=c/x; |
|---|
| | 223 | if(s!=0){ |
|---|
| | 224 | if(r==x){ |
|---|
| | 225 | h=(g-b)/c; |
|---|
| | 226 | } else { |
|---|
| | 227 | if(g==x){ |
|---|
| | 228 | h=2+(b-r)/c; |
|---|
| | 229 | } else { |
|---|
| | 230 | if(b==x){ |
|---|
| | 231 | h=4+(r-g)/c; |
|---|
| | 232 | } |
|---|
| | 233 | } |
|---|
| 262 | | var _h = h; |
|---|
| 263 | | var _s = s/100; |
|---|
| 264 | | var _v = v/100; |
|---|
| 265 | | var vr = 0; |
|---|
| 266 | | var vg = 0; |
|---|
| 267 | | var vb = 0; |
|---|
| 268 | | var cmin, cmax; |
|---|
| 269 | | if(_s<0) _s=0; if(_s>1) _s=1; |
|---|
| 270 | | if(_v<0) _v=0; if(_v>1) _v=1; |
|---|
| 271 | | _h = _h%360; if(_h<0) _h=_h+360; |
|---|
| 272 | | if(_v<=0.5) { cmin=_v*(1-_s); cmax = 2*_v-cmin; } |
|---|
| 273 | | else { cmax = _v*(1-_s)+_s; cmin = 2*_v-cmax; } |
|---|
| 274 | | vr = __convertH(_h+120, cmin, cmax)*255; |
|---|
| 275 | | vg = __convertH(_h, cmin, cmax)*255; |
|---|
| 276 | | vb = __convertH(_h-120, cmin, cmax)*255; |
|---|
| 277 | | return [ vr, vg, vb ]; |
|---|
| | 268 | s=s/100, v=v/100; |
|---|
| | 269 | var r=0, g=0, b=0; |
|---|
| | 270 | var i, x, y, z; |
|---|
| | 271 | if(s<0) s=0; if(s>1) s=1; if(v<0) v=0; if(v>1) v=1; |
|---|
| | 272 | h=h%360; if(h<0) h+=360; h/=60; |
|---|
| | 273 | i = Math.floor(h); |
|---|
| | 274 | x=v*(1-s); y=v*(1-s*(h-i)); z=v*(1-s*(1-h+i)); |
|---|
| | 275 | switch(i){ |
|---|
| | 276 | case 0 : r=v; g=z; b=x; break; |
|---|
| | 277 | case 1 : r=y; g=v; b=x; break; |
|---|
| | 278 | case 2 : r=x; g=v; b=z; break; |
|---|
| | 279 | case 3 : r=x; g=y; b=v; break; |
|---|
| | 280 | case 4 : r=z; g=x; b=v; break; |
|---|
| | 281 | case 5 : r=v; g=x; b=y; break; |
|---|
| | 282 | } |
|---|
| | 283 | return [ r*255, g*255, b*255 ]; |
|---|
| 281 | | /** |
|---|
| 282 | | * convertRGB 内で使用されるプライベート関数 |
|---|
| 283 | | * |
|---|
| 284 | | * @param hh : Number - H(色相を示す値) |
|---|
| 285 | | * @param min : Number - R,G,B 値の最小値 |
|---|
| 286 | | * @param max : Number - R,G,B 値の最大値 |
|---|
| 287 | | * @return Number - R,G,B それぞれ対応する色の値 |
|---|
| 288 | | */ |
|---|
| 289 | | private static function __convertH( hh:Number , min:Number , max:Number ):Number |
|---|
| 290 | | { |
|---|
| 291 | | hh = hh%360; |
|---|
| 292 | | if(hh<0) hh=hh+360; |
|---|
| 293 | | if(hh<60) return min+(max-min)*hh/60; |
|---|
| 294 | | if(hh>=60&&hh<180) return max; |
|---|
| 295 | | if(hh>=180&&hh<240) return min+(max-min)*(240-hh)/60; |
|---|
| 296 | | return min; |
|---|
| 297 | | } |
|---|
| 298 | | |
|---|