web-dev-qa-db-ja.com

色の明るさを調整するにはどうすればよいですか?

グラデーションブラシで使用する既存の色を暗くしたいと思います。誰かがこれを行う方法を教えてもらえますか?

C#、. net 2.0、GDI +

24
Brad

単純なアプローチとして、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)

29
Marc Gravell

また、使用してみることもできます

ControlPaint.Light(baseColor, percOfLightLight)

ControlPaint.Light

または

ControlPaint.Dark(baseColor, percOfDarkDark)

ControlPaint.Dark

22
Alex

RGBからHSV(またはHSL)に変換し、次にV(またはL)を調整してから元に戻します。

System.Drawing.Colorは、色相(H)、彩度(S)、明るさを取得するメソッドを提供します。他の変換の方法ではあまり提供されません。HSV(またはHSV値)から新しいインスタンスを作成することは何もありませんが、変換はかなり簡単です実装する。ウィキペディアの記事は、「 HSLとHSV 」から始まり、まともな収束を示しています。

16
Richard

以下は、リチャードが言及した変換用のC#コードです。

RGBからHSL/HSLからRGBをC#で

9
dommer

前述の方法は色を暗くしますが、色相を大幅に調整するため、結果はあまり美しくありません。最良の答えは、 Rich NewmanのHSLColor クラスを使用して、明度を調整することです。

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

値が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)
1
VB.net Coder