public static Color CreateColorWithCorrectedLightness(Color color, float correctionFactor)
{
Debug.Assert(correctionFactor <= 1 && correctionFactor >= -1);
if (correctionFactor == 0)
return color;
float red = (float)color.R;
float green = (float)color.G;
float blue = (float)color.B;
if (correctionFactor < 0) {
correctionFactor = 1 + correctionFactor;
red *= correctionFactor;
green *= correctionFactor;
blue *= correctionFactor;
}
else {
red = (255 - red) * correctionFactor + red;
green = (255 - green) * correctionFactor + green;
blue = (255 - blue) * correctionFactor + blue;
}
return System.Drawing.Color.FromArgb(color.A, (int)red, (int)green, (int)blue);
}