class Color{ int R,G,B; int H,S,L; float fH,fS,fL; //-------------------- color getColor(){ return color(R,G,B); } //-------------------- void pixel(color c){ this.R = (int) red(c); this.G = (int) green(c); this.B = (int) blue(c); } //-------------------- void rgb(int r, int g, int b){ this.R = r; this.G = g; this.B = b; } //-------------------- void hsl(int h, int s, int l){ this.fH = h/255f; this.fS = s/255f; this.fL = l/255f; } //-------------------- void rgbToHSL(){ float fR = ( R / 255f ); float fG = ( G / 255f ); float fB = ( B / 255f ); float rgbMin = min( fR, fG, fB ); //Min. value of RGB float rgbMax = max( fR, fG, fB ); //Max. value of RGB float dMax = rgbMax - rgbMin; //Delta RGB value fL = ( rgbMax + rgbMin ) / 2; if ( dMax == 0 ){ fH = 0; //HSL results = 0 ÷ 1 fS = 0; } else{ if ( fL < 0.5 ) fS = dMax / ( rgbMax + rgbMin ); else fS = dMax / ( 2 - rgbMax - rgbMin ); float dR = ( (rgbMax-fR)/6 + dMax/2 ) / dMax; float dG = ( (rgbMax-fG)/6 + dMax/2 ) / dMax; float dB = ( (rgbMax-fB)/6 + dMax/2 ) / dMax; if ( fR == rgbMax ) fH = dB - dG; else if ( fG == rgbMax ) fH = 1/3f + dR - dB; else if ( fB == rgbMax ) fH = 2/3f + dG - dR; if ( fH < 0 ) fH += 1; if ( fH > 1 ) fH -= 1; } H = (int)(255*fH); S = (int)(255*fS); L = (int)(255*fL); } //-------------------- void hslToRGB(){ float foo,bar; if ( S == 0 ){ R = (int)( fL * 255 ); G = (int)( fL * 255 ); B = (int)( fL * 255 ); } else{ if ( fL < 0.5 ) bar = fL * (1+fS); else bar = fL + fS - fS*fL; foo = 2*fL - bar; R = (int)( 255 * hueToRGB( foo, bar, fH + 1/3f ) ); G = (int)( 255 * hueToRGB( foo, bar, fH ) ); B = (int)( 255 * hueToRGB( foo, bar, fH - 1/3f ) ); } H = (int)(255*fH); S = (int)(255*fS); L = (int)(255*fL); } //-------------------- float hueToRGB(float v1,float v2,float vH ){ if ( vH < 0 ) vH += 1; if ( vH > 1 ) vH -= 1; if ( 6*vH < 1 ) return ( v1 + (v2-v1)*6*vH ); if ( 2*vH < 1 ) return ( v2 ); if ( 3*vH < 2 ) return ( v1 + (v2-v1) * (2/3f-vH)*6 ); return ( v1 ); } }