如何调整颜色的亮度?
我想将现有颜色变暗以用于渐变画笔。 请问有人告诉我该怎么办?
C#,。net 2.0,GDI +
Color AdjustBrightness(Color c1, float factor) { float r = ((c1.R * factor) > 255) ? 255 : (c1.R * factor); float g = ((c1.G * factor) > 255) ? 255 : (c1.G * factor); float b = ((c1.B * factor) > 255) ? 255 : (c1.B * factor); Color c = Color.FromArgb(c1.A,(int)r, (int)g, (int)b); return c ; }
作为一种简单的方法,您可以只考虑RGB值:
Color c1 = Color.Red; Color c2 = Color.FromArgb(c1.A, (int)(c1.R * 0.8), (int)(c1.G * 0.8), (int)(c1.B * 0.8));
(它应该使它变暗;或者,例如,* 1.25使它变亮)
你也可以尝试使用
ControlPaint.Light(baseColor, percOfLightLight)
ControlPaint.Light
要么
ControlPaint.Dark(baseColor, percOfDarkDark)
ControlPaint.Dark
从RGB转换为HSV(或HSL),然后向下调整V(或L)然后转换回。
虽然System.Drawing.Color
提供了获取色调(H),饱和度(S)和亮度的方法,但它没有提供其他转换的方法,因此无法从HSV(或HSV值)创建新实例,但是转换非常简单。 维基百科文章提供了不错的报道,从这里开始:“ HSL和HSV ”。
以下是Richard提到的转换的一些C#代码:
C#中的RGB到HSL / HSL到RGB#
虽然上述方法确实使颜色变暗但是它们调整色调方式很多,所以结果看起来不太好。 最好的答案是使用Rich Newman的HSLColor类并调整亮度。
public Color Darken(Color color, double darkenAmount) { HSLColor hslColor = new HSLColor(color); hslColor.Luminosity *= darkenAmount; // 0 to 1 return hslColor; }
您必须跟踪该值不会延伸到0以下或255以上
最好的方法是使用Math.Max / Math.MIn
dim newValue as integer = ... 'correct value if it is below 0 or above 255 newValue = Math.Max(Math.Min(newValue,255),0)