ColourConvertor.java

package ac.essex.ooechs.imaging.commons; 
 
import java.awt.*; 
 
/** 
 * Converts between different colour spaces 
 */ 
public class ColourConvertor { 
 
    public static int[] RGB2HSL(int rgb) { 
        // get a colour object, which saves us having to shift bits and other stuff. 
        int value = 0xff000000 | rgb; 
 
        // extract the colours 
        int red = (value >> 16) & 0xFF; 
        int green = (value >> 8) & 0xFF; 
        int blue = value & 0xFF; 
 
        return RGB2HSL(red, green, blue); 
    } 
 
 
    public static int[] RGB2HSL(int r, int g, int b) { 
 
        float var_R = (r / 255f); 
        float var_G = (g / 255f); 
        float var_B = (b / 255f); 
 
        float var_Min;    //Min. value of RGB 
        float var_Max;    //Max. value of RGB 
        float del_Max;    //Delta RGB value 
 
        if (var_R > var_G) { 
            var_Min = var_G; 
            var_Max = var_R; 
        } else { 
            var_Min = var_R; 
            var_Max = var_G; 
        } 
 
        if (var_B > var_Max) var_Max = var_B; 
        if (var_B < var_Min) var_Min = var_B; 
 
        del_Max = var_Max - var_Min; 
 
        float H = 0, S, L; 
        L = (var_Max + var_Min) / 2f; 
 
        if (del_Max == 0) { 
            H = 0; 
            S = 0; 
        } // gray 
        else {                                //Chroma 
            if (L < 0.5) 
                S = del_Max / (var_Max + var_Min); 
            else 
                S = del_Max / (2 - var_Max - var_Min); 
 
            float del_R = (((var_Max - var_R) / 6f) + (del_Max / 2f)) / del_Max; 
            float del_G = (((var_Max - var_G) / 6f) + (del_Max / 2f)) / del_Max; 
            float del_B = (((var_Max - var_B) / 6f) + (del_Max / 2f)) / del_Max; 
 
            if (var_R == var_Max) 
                H = del_B - del_G; 
            else if (var_G == var_Max) 
                H = (1 / 3f) + del_R - del_B; 
            else H = (2 / 3f) + del_G - del_R; 
            if (H < 0) H += 1; 
            if (H > 1) H -= 1; 
        } 
 
        int hsl[] = new int[3]; 
        hsl[0] = (int) (255 * H); 
        hsl[1] = (int) (S * 255); 
        hsl[2] = (int) (L * 255); 
 
        return hsl; 
 
    } 
 
}