|
|
|
|
|
для: СерегаВЕБ
(26.07.2005 в 10:51)
| | Дык есть де-то у меня такое чудо на скрипте :-). Помоему, он не такая уж и большая редкость. Для примера, поищите скрипт, который плавно подсвечивает линки :-). Там как раз преобразование на основе подобной цветовой модели, только оно происходит не в 16-тиричном, а в двоично-десятичном пространстве. | |
|
|
|
|
|
|
| Здрасте, я отличный скрипт нашел: преобразует HLS(оттенок,яркость,насыщенность) в привычный RGB, только проьлема в том, что он написан на Delphi:
{ Максимальные значения }
Const
HLSMAX = 240;
RGBMAX = 255;
UNDEFINED = (HLSMAX*2) div 3;
Var
H, L, S : integer; { H-оттенок, L-яркость, S-насыщенность }
R, G, B : integer; { цвета }
procedure HLStoRGB;
Var
Magic1,Magic2 : single;
function HueToRGB(n1,n2,hue : single) : single;
begin
if (hue < 0) then hue := hue+HLSMAX;
if (hue > HLSMAX) then hue:=hue -HLSMAX;
if (hue < (HLSMAX/6)) then
result:= ( n1 + (((n2-n1)*hue+(HLSMAX/12))/(HLSMAX/6)) )
else
if (hue < (HLSMAX/2)) then result:=n2 else
if (hue < ((HLSMAX*2)/3)) then
result:= ( n1 + (((n2-n1)*(((HLSMAX*2)/3)-hue)+(HLSMAX/12))/(HLSMAX/6)))
else result:= ( n1 );
end;
begin
if (S = 0) then begin
B:=round( (L*RGBMAX)/HLSMAX ); R:=B; G:=B;
end else begin
if (L <= (HLSMAX/2)) then Magic2 := (L*(HLSMAX + S) + (HLSMAX/2))/HLSMAX
else Magic2 := L + S - ((L*S) + (HLSMAX/2))/HLSMAX;
Magic1 := 2*L-Magic2;
R := round( (HueToRGB(Magic1,Magic2,H+(HLSMAX/3))*RGBMAX + (HLSMAX/2))/HLSMAX );
G := round( (HueToRGB(Magic1,Magic2,H)*RGBMAX + (HLSMAX/2)) / HLSMAX );
B := round( (HueToRGB(Magic1,Magic2,H-(HLSMAX/3))*RGBMAX + (HLSMAX/2))/HLSMAX );
end;
if R<0 then R:=0; if R>RGBMAX then R:=RGBMAX;
if G<0 then G:=0; if G>RGBMAX then G:=RGBMAX;
if B<0 then B:=0; if B>RGBMAX then B:=RGBMAX;
end;
|
Я конечно вроде перевелна Яву:
var HLSMAX = 240;
var RGBMAX = 255;
var UNDEFINED = (HLSMAX*2) / 3;
var H, L, S, R, G, B;
function HueToRGB(n1,n2,hue) {
if (hue < 0) { hue = hue+HLSMAX; }
if (hue > HLSMAX) { hue=hue -HLSMAX; }
if (hue < (HLSMAX/6)) {
result= ( n1 + (((n2-n1)*hue+(HLSMAX/12))/(HLSMAX/6)) ) }
else {
if (hue < (HLSMAX/2)) { result=n2 } else {
if (hue < ((HLSMAX*2)/3)) {
result= ( n1 + (((n2-n1)*(((HLSMAX*2)/3)-hue)+(HLSMAX/12))/(HLSMAX/6))) }
else { result= ( n1 ); }}}
return result;
}
function hlstorgb() {
var Magic1,Magic2;
if (S = 0) {
B=Math.round( (L*RGBMAX)/HLSMAX ); R=B; G=B;
} else {
if (L <= (HLSMAX/2)) { Magic2 = (L*(HLSMAX + S) + (HLSMAX/2))/HLSMAX }
else { Magic2 = L + S - ((L*S) + (HLSMAX/2))/HLSMAX; }
Magic1 = 2*L-Magic2;
R = Math.round( (HueToRGB(Magic1,Magic2,H+(HLSMAX/3))*RGBMAX + (HLSMAX/2))/HLSMAX );
G = Math.round( (HueToRGB(Magic1,Magic2,H)*RGBMAX + (HLSMAX/2)) / HLSMAX );
B = Math.round( (HueToRGB(Magic1,Magic2,H-(HLSMAX/3))*RGBMAX + (HLSMAX/2))/HLSMAX );
}
if (R<0) {R=0;}
if (R>RGBMAX) { R=RGBMAX;}
if (G<0) {G=0;}
if (G>RGBMAX) { G=RGBMAX;}
if (B<0) {B=0;}
if (B>RGBMAX) { B=RGBMAX;}
}
|
Тока че-то не работает. Изменяется только яркость, значения все типа #C7C8C8. Может я где-то что-то напутал. Прикрепляю полную версию скрипта. | |
|
|
|
|