%ffp ctl(0):"Hue",val=28,size=(*,6),pos=(225,32),fontcolor=black,Range=(-255,255),val=0 ctl(1):"Saturation",val=201,size=(*,6),pos=(225,42),fontcolor=black,Range=(-255,255),val=0 ctl(2):"Lightness",val=0,size=(*,6),pos=(225,52),fontcolor=black,Range=(-255,255),val=0 ForEveryTile:{ int r,g,b,h,s,l; float rf,gf,bf,hf,sf,lf, cmax,cmin,diff,hf2, m1,m2; for (y=y_start; y cmax) {cmax = rf;} if (gf > cmax) {cmax = gf;} if (rf < cmin) {cmin = rf;} if (gf < cmin) {cmin = gf;} //The following code doesn't work because //FM doesn't support float variables with min and max //cmax=max(rf, max(gf,bf)); //cmin=min(rf, min(gf,bf)); lf = (cmax + cmin)/2.0; if (cmax==cmin){ sf = 0.0; hf = 0.0; } else { diff = cmax-cmin; if (lf < 0.5) {sf = diff/(cmax+cmin);} else {sf = diff/(2.0-cmax-cmin);} if (rf==cmax) { hf = (gf-bf)/diff;} else if (gf==cmax) { hf = 2.0 + (bf-rf)/diff;} else {hf = 4.0+(rf-gf)/diff;} hf = hf/6.0; if (hf < 0.0) { hf = hf+1.0;} } //Scale hsl to int h=hf*255; s=sf*255; l=lf*255; //Do the HSL adjustment h=h+ctl(0); s=s+ctl(1); l=l+ctl(2); //Scale to float hf=h/255.0;sf=s/255.0;lf=l/255.0; //Convert HSL to RGB if (sf == 0.0) { rf = lf; gf = lf; bf = lf; } else { if (lf <= 0.5) {m2 = lf*(1.0+sf);} else {m2 = lf+sf-(lf*sf);} m1 = 2.0 * lf - m2; //Calculate Red hf2=hf+1.0/3.0; if (hf2 < 0) {hf2 = hf2 + 1.0;} if (hf2 > 1) {hf2 = hf2 - 1.0;} if (6.0 * hf2 < 1){ rf = (m1+(m2-m1)*hf2*6.0);} else{ if (2.0 * hf2 < 1){ rf = m2; } else { if (3.0*hf2 < 2.0) {rf = (m1+(m2-m1)*((2.0/3.0)-hf2)*6.0);} else {rf = m1;} } } //Calculate Green if (hf < 0) {hf = hf + 1.0;} if (hf > 1) {hf = hf - 1.0;} if (6.0 * hf < 1){ gf = (m1+(m2-m1)*hf*6.0);} else { if (2.0 * hf < 1){ gf = m2; } else { if (3.0*hf < 2.0) {gf = (m1+(m2-m1)*((2.0/3.0)-hf)*6.0);} else {gf = m1;} } } //Calculate Blue hf2=hf-1.0/3.0; if (hf2 < 0) {hf2 = hf2 + 1.0;} if (hf2 > 1) {hf2 = hf2 - 1.0;} if (6.0 * hf2 < 1) { bf = (m1+(m2-m1)*hf2*6.0);} else { if (2.0 * hf2 < 1){ bf = m2; } else { if (3.0*hf2 < 2.0) {bf = (m1+(m2-m1)*((2.0/3.0)-hf2)*6.0);} else {bf = m1;} } } } //Scale rgb to int r=rf*255; g=gf*255; b=bf*255; //Write rgb to image pset(x,y,0,r); pset(x,y,1,g); pset(x,y,2,b); }} return true; }