如何调整颜色的亮度?

时间:2009-04-10 10:08:30

标签: c# gdi+

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

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 ;

    }

6 个答案:

答案 0 :(得分:28)

作为一种简单的方法,您可以只考虑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使其变亮)

答案 1 :(得分:20)

您也可以尝试使用

ControlPaint.Light(baseColor, percOfLightLight)

ControlPaint.Light

ControlPaint.Dark(baseColor, percOfDarkDark)

ControlPaint.Dark

答案 2 :(得分:16)

从RGB转换为HSV(或HSL),然后向下调整V(或L)然后转换回来。

虽然System.Drawing.Color提供了获得色调(H),饱和度(S)和亮度的方法,但它没有提供其他转换的方法,因此无法从HSV(或HSV值)创建新实例,但转换很容易实现。从这里开始,维基百科文章提供了不错的报道:“HSL and HSV”。

答案 3 :(得分:9)

以下是Richard提到的转换的一些C#代码:

RGB to HSL / HSL to RGB in C#

答案 4 :(得分:3)

虽然上述方法会使颜色变暗但是它们会调整色调方式,因此结果看起来不太好。最好的答案是使用Rich Newman's HSLColor类并调整亮度。

public Color Darken(Color color, double darkenAmount) {
    HSLColor hslColor = new HSLColor(color);
    hslColor.Luminosity *= darkenAmount; // 0 to 1
    return hslColor;
}

答案 5 :(得分:1)

您必须跟踪该值未超过0或高于255

最佳方法是使用Math.Max / Math.MIn

WHERE SUBSTRING(NAME,1,1) IN (a,e,i,o,u) AND SUBSTRING(NAME,-1) IN (a,e,i,o,u)