class ColorUtilities {

    public static Color brighten(Color input, double factor)
    {
        if (factor < BRIGHTNESS_FACTOR_MIN || factor > BRIGHTNESS_FACTOR_MAX)
        {
            throw new IllegalArgumentException("Color brighten factor must be between 0.01 and 0.99");
        }

        int r = input.getRed();
        int g = input.getGreen();
        int b = input.getBlue();

        /* From 2D group: 1. black.brighter() should return grey 2. applying
         * brighter to blue will always return blue, brighter 3. non pure color
         * (non zero RGB) will eventually return white */
        int i = (int)(BLACK_BRIGHTEN_MIN / (1.0 - factor));
        if (r == 0 && g == 0 && b == 0)
        {
            return new Color(i, i, i);
        }
        if (r > 0 && r < i)
        {
            r = i;
        }
        if (g > 0 && g < i)
        {
            g = i;
        }
        if (b > 0 && b < i)
        {
            b = i;
        }

        return new Color(Math.min((int)(r / factor), 255), Math.min((int)(g / factor), 255), Math.min((int)(b / factor), 255),
                input.getAlpha());
    }

    private  ColorUtilities();

}