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.
Search WWH ::




Custom Search