Graphics Reference
In-Depth Information
UNDEFINED is a constant real number outside the interval [0,360].
procedure
HSLToRGB (
real
h, s,
;
ref real
r, b, g)
{ Input:
h Œ [0,360] or UNDEFINED, s ,
Œ [0,1]
Output:
r, g, b Œ [0,1]
begin
real
v, min, sv, sextant, fract, vsf, mid1, mid2;
integer
sextant;
if
s = 0
then
{ the achromatic case }
begin
if
h = UNDEFINED
then begin
r :=
; g :=
; b :=
;
end
else
Error ()
{ invalid input }
end
;
if
£ 0.5
then
v :=
*(1 + s)
else
v :=
+ s -
*s;
if
v = 0
then
begin
r := 0; g := 0; b := 0;
end
else
begin
min := 2* - v;
sv := (v - min)/v;
if
h = 360
then
h := 0
else
h := h/60;
sextant := Floor (h);
{ h is now in [0,6) }
fract := h - sextant;
{ the fractional part of h }
vsf := v*sv*fract;
mid1 := min + vsf;
mid2 := v - vsf;
case
sextant
of
0 :
begin
r := v; g := mid1; b := min;
end
;
1 :
begin
r := mid2; g := v; b := min;
end
;
2 :
begin
r := min; g := v; b := min1;
end
;
3 :
begin
r := min; g := mid2; b := v;
end
;
4 :
begin
r := mid1; g := min; b := v;
end
;
5 :
begin
r := v; g := min; b := mid2;
end
;
end
end
end
;
Algorithm 8.6.4.
Converting HSL to RGB.