То, что вы хотите сделать, это вычислить относительное значение для каждого цветового компонента по отношению к средней люминесценции, а затем умножить каждое из них на пару смещений, чтобы получить различную яркость ...
Это псевдокод, я уверен, что вы можете выяснить детали:
function getColors(baseline) {
var offsets = [ 0x33, 0x66, 0x99, 0xCC ];
// Use Jake's suggestion on computing luminescence...
var lum = getLuminescence(baseline);
var redCoefficient = baseline[red] / lum;
var greenCoefficient = baseline[green] / lum;
var blueCoefficient = baseline[blue] / lum;
var output = [];
for (offsetInd in offsets) {
var offset = offsets[offsetInd];
output.push(new Color(offset * redCoefficient,
offset * greenCofficient, offset * blueCoefficient));
}
return ouptut;
}