HP Forums
HSV - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP Prime Software Library (/forum-15.html)
+--- Thread: HSV (/thread-21776.html)



HSV - Insoft - 05-22-2024 02:07 AM

HSV Color Space Function
HSV. The HSV (Hue, Saturation, Value) color space corresponds better to how people experience color than the RGB color space does. For example, this color space is often used by people who are selecting colors, such as paint or ink color, from a color wheel or palette.

PPL
Code:
EXPORT HSV(h,s,v)
BEGIN
h MOD 360/60▶h;
MIN(MAX(s,0),100)/100▶s;
MIN(MAX(v,0),100)/100▶v;
LOCAL f,p,q,t,m;
h-FLOOR(h)▶f;
v*(1-s)▶p;
v*(1-s*f)▶q;
v*(1-s*(1-f))▶t;
LOCAL r,g,b;
FLOOR(h)▶m;
IF m=0 THEN v▶r;t▶g;p▶b;END;
IF m=1 THEN q▶r;v▶g;p▶b;END;
IF m=2 THEN p▶r;v▶g;t▶b;END;
IF m=3 THEN p▶r;q▶g;v▶b;END;
IF m=4 THEN t▶r;p▶g;v▶b;END;
IF m=5 THEN v▶r;p▶g;q▶b;END;
RETURN RGB(r*255,g*255,b*255);
END;

P+ Source Code
Code:
#pragma ( minify -1, reduce, newline )

#include <prime>

export HSV(h:hue, s:saturation, v:value)
begin
    hue = hue % 360 / 60;
    saturation = MIN(MAX(saturation, 0), 100) / 100;
    value = MIN(MAX(value, 0), 100) / 100;
    
    var f, p, q, t, m;
    f = hue - math::floor(h);
    p = value * (1 - saturation);
    q = value * (1 - saturation * f);
    t = value * (1 - saturation * (1 - f));

    var r:red, g:green, b:blue;
    m = math::floor(h);
    
    if m==0 then red = value; green = t; blue = p; end;
    if m==1 then red = q; green = value; blue = p; end;
    if m==2 then red = p; green = value; blue = t; end;
    if m==3 then red = p; green = q; blue = value; end;
    if m==4 then red = t; green = p; blue = value; end;
    if m==5 then red = value; green = p; blue = q; end;
  
    return RGB(red * 255, green * 255, blue * 255);
end

P+
GitHub