您可以尝试获取画笔的A,RGB值,然后将它们传递给System.Drawing.Color.FromARGB()Pseudo-Code:
Brush br = Brushes.Green;
byte a = ((Color)br.GetValue(SolidColorBrush.ColorProperty)).A;
byte g = ((Color)br.GetValue(SolidColorBrush.ColorProperty)).G;
byte r = ((Color)br.GetValue(SolidColorBrush.ColorProperty)).R;
byte b = ((Color)br.GetValue(SolidColorBrush.ColorProperty)).B;
System.Windows.Forms.ControlPaint.Light(
System.Drawing.Color.FromArgb((int)a,(int)r,(int)g,(int)b));
Run Code Online (Sandbox Code Playgroud)
我不是WPF专家,但我认为你需要记住的主要方法是做你想要的最简单的方法是使用System.Drawing.Color.FromArgb()甚至是System.Drawing.Color.FromName().
你不需要引用巨大的Windows.Formsdll 只是为了减轻一个Color.用最简单的术语来说,你只是将每个值乘以相同的因子:
private Color AdjustBrightness(double brightnessFactor)
{
Color originalColour = Color.Red;
Color adjustedColour = Color.FromArgb(originalColour.A,
(int)(originalColour.R * brightnessFactor),
(int)(originalColour.G * brightnessFactor),
(int)(originalColour.B * brightnessFactor));
return adjustedColour;
}
Run Code Online (Sandbox Code Playgroud)
这当然可以通过几种方式(并且应该)得到改善,但是你可以得到这个想法.事实上,Exception如果一个值超过255 ,这将抛出一个,但我相信你可以照顾它.现在你只需要检查一下Brush你需要提亮的类型:
if (brush is SolidColorBrush)
return new SolidColorBrush(AdjustBrightness(((SolidColorBrush)brush).Color));
else if (brush is LinearGradientBrush || brush is RadialGradientBrush)
{
// Go through each `GradientStop` in the `Brush` and brighten its colour
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我这样做(扩展方法):
public static class BrushExtension
{
public static Color GetColor(this Brush brush)
{
return new Pen(brush).Color;
}
}
Run Code Online (Sandbox Code Playgroud)
并称之为 Color brushColor = myBrush.GetColor();
小智 6
尝试这个:
Brush brush = Brushes.Yellow;
Color color = ((SolidColorBrush) brush).Color;
Run Code Online (Sandbox Code Playgroud)