如何调整颜色的亮度?

我想将现有颜色变暗以用于渐变画笔。 请问有人告诉我该怎么办?

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)