将画笔转换为颜色

Rob*_*pta 12 c# wpf xaml colors winforms

我想转换一个Brush对象,Color以便我可以将任何xaml按钮背景颜色更改为light color按钮单击,但System.Windows.Forms.ControlPaint.Light()只使用颜色作为参数.

有没有替代方案来实现这一目标?

dav*_*bro 9

您可以尝试获取画笔的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().


She*_*dan 8

你不需要引用巨大的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)


Joe*_*oel 6

在我的情况下,我这样做(扩展方法):

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();

  • @downvoter我不介意,如果它带有“为什么”呢? (2认同)

小智 6

尝试这个:

        Brush brush = Brushes.Yellow;
        Color color = ((SolidColorBrush) brush).Color;
Run Code Online (Sandbox Code Playgroud)