グラデーションブラシで使用する既存の色を暗くしたいと思います。誰かがこれを行う方法を教えてもらえますか?
C#、. net 2.0、GDI +
単純なアプローチとして、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.Dark(baseColor, percOfDarkDark)
RGBからHSV(またはHSL)に変換し、次にV(またはL)を調整してから元に戻します。
System.Drawing.Color
は、色相(H)、彩度(S)、明るさを取得するメソッドを提供します。他の変換の方法ではあまり提供されません。HSV(またはHSV値)から新しいインスタンスを作成することは何もありませんが、変換はかなり簡単です実装する。ウィキペディアの記事は、「 HSLとHSV 」から始まり、まともな収束を示しています。
以下は、リチャードが言及した変換用のC#コードです。
前述の方法は色を暗くしますが、色相を大幅に調整するため、結果はあまり美しくありません。最良の答えは、 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)