/* input ranges */ H = [0,360) L = [0,1] S = [0,1] /* HLS to RGB (from Raster Graphics Handbook p.337) */ if (L <= 0.5) { M = L * (1 + S); } else { M = L + S - L * S; } m = 2 * L - M; /* red */ case H = [0,60): R = m + (M - m) * (H / 60); case H = [60,180): R = M; case H = [180,240): R = m + (m - m) * ((240 - H) / 60); case H = [240,360): R = m; /* green */ case H = [0,120): G = m; case H = [120,180): G = m + (M - m) * ((H - 120) / 60); case H = [180,300): G = M; case H = [300,360): G = m + (M - m) * ((360 - H) / 60); /* blue */ case H = [0,60): B = M; case H = [60,120): B = m + (M - m) * ((120 - H) / 60); case H = [120,240): B = m case H = [240,360): B = m + (M - m) * ((H - 240) / 60); /* output ranges */ R = [0,1] G = [0,1] B = [0,1]