Я тоже по-началу так делал. Но проведя эксперименты в фотошопе и начитавшись литературы понял, что нужно делать (MIN+MAX)/2 , где MIN - значение минимального по уровню канала, а MAX - значение максимального. То есть как уменьшить насыщенность до нижней границы, я разобрался почти сразу. А вот как рассчитать максимальную... В принципе я вроде тоже понял, но не могу формулу вывести. Там получается куча условий и прочей фигни, что по количеству кода получается в два раза больше, чем полное преобразование RGB - HSV (HSL) - RGB. Пока так и сделал. Но хотелось бы разобраться до конца.