slider1:0<0,255,1>|-------------------- R
slider2:0<0,255,1>G
slider3:0<0,255,1>B
slider4:0<0,360,1>|-------------------- H
slider5:1<0,1,0.001>S
slider6:0.5<0,1,0.001>L
slider7:0<0,16777215,1>|--------- decimals
slider8:0<0,1,0.00001>|------------ R (gfx)
slider9:0<0,1,0.000001>G (gfx)
slider10:0<0,1,0.000001>B (gfx)
slider11:0<0,255,1>|------- Grayscale
slider12:4<0,4,1{RGB,HSL,decimals,RGB (gfx),Mouse}>Mode
slider13:0<0,1,1{off,on}>Grayscale
slider14:150<0,400,1>--pos x
slider15:10<0,100,1>--pos y
slider16:1<0.5,4,0.1>Zoom
slider17:0<0,11,1>Image

filename:0,color_toolgfx/001.png
filename:1,color_toolgfx/002.png
filename:2,color_toolgfx/003.png
filename:3,color_toolgfx/004.png
filename:4,color_toolgfx/005.png
filename:5,color_toolgfx/006.png
filename:6,color_toolgfx/007.png
filename:7,color_toolgfx/008.png
filename:8,color_toolgfx/009.png
filename:9,color_toolgfx/010.png
filename:10,color_toolgfx/011.png
filename:11,color_toolgfx/012.png

in_pin:none
out_pin:none

@init
// RGB <-> HSL
function round(value)(
floor(value + 0.5);
);
function roundto(val,to)(
round(val/to)*to;
);
function mod(val,mod)(
abs(roundto(val,mod) - val);
);

// RGB to HEX
hextab = 0;
i=0;
loop(10,hextab[i] = $'0' + i; i+=1; );
loop(6,hextab[i] = $'A' + i - 10; i+=1; );

@block
slider12==0?(

// RGB to RGB(gfx)
R=slider1/255;
G=slider2/255;
B=slider3/255;

// RGB to HSL
min = min(min(R,G),B);
max = max(max(R,G),B);
C = max-min;
L = (min+max)*0.5;
S = C / (L < 0.5 ? max+min : 2-max-min);
H = R == max ? (G-B)/C: 
G == max ? 2+(B-R)/C : 4+(R-G)/C;
H < 0 ? H+=6;

slider4=round(H*60);
slider5=S;
slider6=L;

// RGB to decimals
slider7=(slider1 << 16) + (slider2 << 8) + slider3;

// Grayscale
slider11=ceil(0.299*slider1 + 0.587*slider2 + 0.114*slider3);

// RGB to RGB(gfx)
slider8=slider1/255;
slider9=slider2/255;
slider10=slider3/255;
);

slider12==1?(

temp=round(slider4/60);
H=temp;
S=slider5;
L=slider6;

// HSL to RGB
S == 0 ? R=G=B=L : (
C = S * (1 - abs(2*L-1));
X = C * (1 - abs(mod(H,2) - 1));
H < 1 ? (R=C; G=X; B=0):
H < 2 ? (R=X; G=C; B=0):
H < 3 ? (R=0; G=C; B=X):
H < 4 ? (R=0; G=X; B=C):
H < 5 ? (R=X; G=0; B=C):
(R=C; G=0; B=X);
m = L - C*0.5;
R+=m; B+=m; G+=m;
);

slider1=round(R*255);
slider2=round(G*255);
slider3=round(B*255);

// RGB to decimals
slider7=(slider1 << 16) + (slider2 << 8) + slider3;

// Grayscale
slider11=ceil(0.299*slider1 + 0.587*slider2 + 0.114*slider3);

// RGB to RGB(gfx)
slider8=slider1/255;
slider9=slider2/255;
slider10=slider3/255;
);

slider12==2?(

// decimals to RGB
R=floor(slider7/ 65536);
slider1=R;
sliderchange(slider1);
G=floor((slider7 - (65536 * R)) / 256);
slider2=G;
sliderchange(slider2);
B=slider7 - (65536 * R + 256 * G);
slider3=floor(B);
sliderchange(slider3);

// RGB to RGB(gfx)
slider8=slider1/255;
slider9=slider2/255;
slider10=slider3/255;

// RGB to HSL
min = min(min(slider8,slider9),slider10);
max = max(max(slider8,slider9),slider10);
C = max-min;
L = (min+max)*0.5;
S = C / (L < 0.5 ? max+min : 2-max-min);
H = slider8 == max ? (slider9-slider10)/C: 
G == max ? 2+(slider10-slider8)/C : 4+(slider8-slider9)/C;
H < 0 ? H+=6;

slider4=round(H*60);
slider5=S;
slider6=L;

// Grayscale
slider11=ceil(0.299*slider1 + 0.587*slider2 + 0.114*slider3);
);

slider12==3?(

// RGB(gfx) to RGB
R=255*slider8;
slider1 = ceil(R);
sliderchange(slider1);
g=255*slider9;
slider2 = ceil(G);
sliderchange(slider2);
b=255*slider10;
slider3 = ceil(B);
sliderchange(slider3);

// RGB to HSL
min = min(min(R,G),B);
max = max(max(R,G),B);
C = max-min;
L = (min+max)*0.5;
S = C / (L < 0.5 ? max+min : 2-max-min);
H = R == max ? (G-B)/C: 
G == max ? 2+(B-R)/C : 4+(R-G)/C;
H < 0 ? H+=6;

slider4=round(H*60);
slider5=S;
slider6=L;

// RGB to decimals
slider7=(slider1 << 16) + (slider2 << 8) + slider3;

// Grayscale
slider11=ceil(0.299*slider1 + 0.587*slider2 + 0.114*slider3);
);

// RGB to HEX
rx=slider1;
gx=slider2;
bx=slider3;

x1=rx/16;
y1=rx%=16;
x2=gx/16;
y2=gx%=16;
x3=slider3/16;
y3=bx%=16;

@gfx 0 210
gfx_a =1;
slider13 ? (
z=0.299*slider1/255 + 0.587*slider2/255 + 0.114*slider3/255;
gfx_r=gfx_g=gfx_b=z;
):(
gfx_r=slider8;gfx_g=slider9;gfx_b=slider10;
);
gfx_x=0;gfx_y=0;
gfx_rectto(gfx_w,gfx_h);

slider12==4?(
gfx_a=1;
gfx_r=gfx_g=gfx_b=0;
(mouse_cap) == 2 ?
(
gfx_x=mouse_x;
gfx_y=mouse_y;
slider14=mouse_x;
slider15=mouse_y;
):(
gfx_x=slider14;
gfx_y=slider15;
);
gfx_getimgdim(slider17,w,h);
gfx_blit(slider17,slider16,0);

(mouse_cap) == 1 ?
(
((mouse_x < slider14+w*slider16) && (mouse_y < slider15+h*slider16) && (mouse_x > slider14) && (mouse_y > slider15)) ?
(
gfx_x = mouse_x;
gfx_y = mouse_y;

gfx_getpixel(slider8,slider9,slider10);
sliderchange(slider8);
sliderchange(slider9);
sliderchange(slider10);

R=slider8;
G=slider9;
B=slider10;
slider1=round(R*255);
slider2=round(G*255);
slider3=round(B*255);

min = min(min(R,G),B);
max = max(max(R,G),B);
C = max-min;
L = (min+max)*0.5;
S = C / (L < 0.5 ? max+min : 2-max-min);
H = R == max ? (G-B)/C: 
G == max ? 2+(B-R)/C : 4+(R-G)/C;
H < 0 ? H+=6;

slider4=round(H*60);
slider5=S;
slider6=L;

slider7=(slider1 << 16) + (slider2 << 8) + slider3;

slider11=ceil(0.299*slider1 + 0.587*slider2 + 0.114*slider3);
);
);

// RGB
gfx_x=gfx_w-145;
gfx_y=gfx_h-gfx_texth-2;
gfx_r=gfx_g=gfx_b=0;
gfx_a=1;
gfx_rectto(gfx_w,gfx_h);

gfx_x=gfx_w-143;
gfx_y=gfx_h-gfx_texth;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("R:");
gfx_drawnumber(slider1,0);

gfx_x=gfx_w-92;
gfx_y=gfx_h-gfx_texth;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("G:");
gfx_drawnumber(slider2,0);

gfx_x=gfx_w-41;
gfx_y=gfx_h-gfx_texth;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("B:");
gfx_drawnumber(slider3,0);
);

// HEX
gfx_x=0;
gfx_y=gfx_h-gfx_texth-2;
gfx_r=gfx_g=gfx_b=0;
gfx_a=1;
gfx_rectto(56,gfx_h);

gfx_r=gfx_g=gfx_b=1;
gfx_x=2;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x1]);
gfx_x=10;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y1]);
gfx_x=20;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x2]);
gfx_x=28;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y2]);
gfx_x=38;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x3]);
gfx_x=46;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y3]);
