По аналогии с темой в разделе по php.
Наткнулся тут. Функции по преобразованию цвета из HSB в RGB и обратно (возвращают объект со свойствами R, G, B и H, S, B соответственно; десятичное число). До кучи функция Dec2Hex (от 0 до 255, но для работы с цветом хватит
).
Наткнулся тут. Функции по преобразованию цвета из HSB в RGB и обратно (возвращают объект со свойствами R, G, B и H, S, B соответственно; десятичное число). До кучи функция Dec2Hex (от 0 до 255, но для работы с цветом хватит
Код:
function RGB_to_HSB(R,G,B){
var H=0;
var S=0;
var Br=0;
var ansver=new Object();
if((B<=G)&&(G<R)){
H=(G-B)*60/(R-B);
Br=R;
S=(R-B)*100/R;
}
if((B<R)&&(R<=G)){
H=60+(G-R)*60/(G-B);
Br=G;
S=(G-B)*100/G;
}
if((R<=B)&&(B<G)){
H=120+(B-R)*60/(G-R);
Br=G;
S=(G-R)*100/G;
}
if((R<G)&&(G<=B)){
H=180+(B-G)*60/(B-R);
Br=B;
S=(B-R)*100/B;
}
if((G<=R)&&(R<B)){
H=240+(R-G)*60/(B-G);
Br=B;
S=(B-G)*100/B;
}
if((G<B)&&(B<=R)){
H=300+(R-B)*60/(R-G);
Br=R;
S=(R-G)*100/R;
}
if((R==G)&&(G==B)){
H=0;
Br=R;
S=0;
}
ansver.H=Math.floor(H+0.5);
ansver.S=Math.floor(S+0.5);
if(Br==254){ansver.B=99}
if(Br==1){ansver.B=1}
if((Br!=254)&&(Br!=1)){ansver.B=Math.floor(Br*100/255+0.5)}
return ansver;
}
function HSB_to_RGB(H,S,B){
var R=0;
var G=0;
var Bl=0;
var ansver=new Object();
H=H%360;
if((0<=H)&&(H<60)){
R=B*255/100;
Bl=R*(1-S/100);
G=(R-Bl)*H/60+Bl;
}
if((60<=H)&&(H<120)){
G=B*255/100;
Bl=G*(1-S/100);
R=(G-Bl)*(1-(H-60)/60)+Bl;
}
if((120<=H)&&(H<180)){
G=B*255/100;
R=G*(1-S/100);
Bl=(G-R)*(H-120)/60+R;
}
if((180<=H)&&(H<=240)){
Bl=B*255/100;
R=Bl*(1-S/100);
G=(Bl-R)*(1-(H-180)/60)+R;
}
if((240<=H)&&(H<300)){
Bl=B*255/100;
G=Bl*(1-S/100);
R=(Bl-G)*(H-240)/60+G;
}
if((300<=H)&&(H<360)){
R=B*255/100;
G=R*(1-S/100);
Bl=(R-G)*(1-(H-300)/60)+G;
}
ansver.R=Math.floor(R+0.5);
ansver.G=Math.floor(G+0.5);
ansver.B=Math.floor(Bl+0.5);
return ansver;
}
function Dec2Hex (Dec) {
var hexChars = "0123456789ABCDEF";
var a = Dec % 16;
var b = (Dec - a)/16;
hex = "" + hexChars.charAt(b) + hexChars.charAt(a);
return hex;
}