Graphics Reference
In-Depth Information
UNDEFINED is a constant real number outside the interval [0,360].
procedure
HSVToRGB (
real
h, s, v;
ref real
r, b, g)
{ Input:
h Œ [0,360] or UNDEFINED, s , v Œ [0,1]
Output:
r, g, b Œ [0,1]
begin
integer
sextant;
real
fract, p, q, t;
if
s = 0
then
if
h = UNDEFINED
then begin
r := v; g := v; b := v;
end
else
Error ()
{ invalid input }
else
begin
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 }
p := v*(1 - s);
q := v*(1 - (s*fract));
t := v*(1 - (s*(1 - fract)));
case
i
of
0 :
begin
r := v; g := t; b := p;
end
;
1 :
begin
r := q; g := v; b := p;
end
;
2 :
begin
r := p; g := v; b := t;
end
;
3 :
begin
r := p; g := q; b := v;
end
;
4 :
begin
r := t; g := p; b := v;
end
;
5 :
begin
r := v; g := p; b := q;
end
;
end
end
end
;
Algorithm 8.6.2.
Converting HSV to RGB.