float[] hsv2rgb(float h, float s, float v) { float r, g, b, i, f, p, q, t; float[] ret = { 0,0,0 }; r = g = b = 0; h%=360; if(v==0) {return ret;} s/=100; v/=100; h/=60; i = floor(h); f = h-i; p = v*(1-s); q = v*(1-(s*f)); t = v*(1-(s*(1-f))); if (i==0) {r=v; g=t; b=p;} else if (i==1) {r=q; g=v; b=p;} else if (i==2) {r=p; g=v; b=t;} else if (i==3) {r=p; g=q; b=v;} else if (i==4) {r=t; g=p; b=v;} else if (i==5) {r=v; g=p; b=q;} ret[0] = floor(r*255); ret[1] = floor(g*255); ret[2] = floor(b*255); return ret; } float[] rgb2hsv(float r, float g, float b) { float x, val, f, i, h, s, v; h=s=v=0; float[] ret = { 0,0,0 }; r/=255; g/=255; b/=255; x = min(min(r, g), b); val = max(max(r, g), b); if (x==val){ ret[0] = 0; ret[1] = 0; ret[2] = floor(val*100); return( ret ); } f = (r == x) ? g-b : ((g == x) ? b-r : r-g); i = (r == x) ? 3 : ((g == x) ? 5 : 1); ret[0] = floor((i-f/(val-x))*60)%360; ret[1] = floor(((val-x)/val)*100); ret[2] = floor(val*100); return(ret); } void RGBtoXYZ(float [] rgb, float [] xyz) { float r = rgb[0] / this.g.colorModeX; float g = rgb[1] / this.g.colorModeY; float b = rgb[2] / this.g.colorModeZ; r = (r > 0.04045f) ? pow(((r+0.055f)/1.055f),2.4f) : r/12.92f; g = (g > 0.04045f) ? pow(((g+0.055f)/1.055f),2.4f) : g/12.92f; b = (b > 0.04045f) ? pow(((b+0.055f)/1.055f),2.4f) : b/12.92f; r *= 100.0f; g *= 100.0f; b *= 100.0f; xyz[0] = (r * 0.4124f + g * 0.3576f + b * 0.1805f); xyz[1] = (r * 0.2126f + g * 0.7152f + b * 0.0722f); xyz[2] = (r * 0.0193f + g * 0.1192f + b * 0.9505f); } void XYZtoRGB(float [] xyz, float [] rgb) { float x = xyz[0] / 100.0f; float y = xyz[1] / 100.0f; float z = xyz[2] / 100.0f; float r = (x * 3.2406f + y * -1.5372f + z * -0.4986f); float g = (x * -0.9689f + y * 1.8758f + z * 0.0415f); float b = (x * -0.0557f + y * -0.2040f + z * 1.0570f); r = (r > 0.0031308f) ? 1.055f*(pow(r,1.0f/2.4f))-0.055f : 12.92f*r; g = (g > 0.0031308f) ? 1.055f*(pow(g,1.0f/2.4f))-0.055f : 12.92f*g; b = (b > 0.0031308f) ? 1.055f*(pow(b,1.0f/2.4f))-0.055f : 12.92f*b; rgb[0] = r * this.g.colorModeX; rgb[1] = g * this.g.colorModeY; rgb[2] = b * this.g.colorModeZ; }