Post Reply 
HSV
05-22-2024, 02:07 AM (This post was last modified: 05-25-2024 12:52 AM by Insoft.)
Post: #1
HSV
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
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)