从颜色转换到画笔

本文关键字:画笔 转换 颜色 | 更新日期: 2023-09-27 17:50:04

如何在c#中将Color转换为Brush ?

从颜色转换到画笔

这是ColorBrush ....

你不能转换它,你必须创建一个新的画笔....

SolidColorBrush brush = new SolidColorBrush( myColor );

现在,如果你在XAML中需要它,你可以创建一个自定义值转换器并在绑定

中使用它
Brush brush = new SolidColorBrush(color);

反过来:

if (brush is SolidColorBrush colorBrush)
    Color color = colorBrush.Color;

或者类似的。

点不是所有的画笔都是颜色,但是你可以把所有的颜色都变成一个(SolidColor)画笔

SolidColorBrush brush = new SolidColorBrush( Color.FromArgb(255,255,139,0) )

你可以这样做:

new SolidBrush(color)

,其中颜色是这样的:

Color.Red

Color.FromArgb(36,97,121))

或…

如果你碰巧在一个混合了Windows窗体和WPF的应用程序中工作,你可能会遇到额外的复杂问题,试图将System.Drawing.Color转换为System.Windows.Media.Color。我不确定是否有更简单的方法来做到这一点,但我这样做了:

System.Drawing.Color MyColor = System.Drawing.Color.Red;
System.Windows.Media.Color = ConvertColorType(MyColor);
System.Windows.Media.Color ConvertColorType(System.Drawing.Color color)
{
  byte AVal = color.A;
  byte RVal = color.R;
  byte GVal = color.G;
  byte BVal = color.B;
  return System.Media.Color.FromArgb(AVal, RVal, GVal, BVal);
}

然后你可以使用前面提到的一种技术来转换为画笔

我以前也有过同样的问题,这里是我的类,解决了颜色转换使用它并享受它:

给你,用我的类多色转换

using System;
using System.Windows.Media;
using SDColor = System.Drawing.Color;
using SWMColor = System.Windows.Media.Color;
using SWMBrush = System.Windows.Media.Brush;
//Developed by امین امیری دربان
namespace APREndUser.CodeAssist
{
    public static class ColorHelper
    {
        public static SWMColor ToSWMColor(SDColor color) => SWMColor.FromArgb(color.A, color.R, color.G, color.B);
        public static SDColor ToSDColor(SWMColor color) => SDColor.FromArgb(color.A, color.R, color.G, color.B);
        public static SWMBrush ToSWMBrush(SDColor color) => (SolidColorBrush)(new BrushConverter().ConvertFrom(ToHexColor(color)));
        public static string ToHexColor(SDColor c) => "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
        public static string ToRGBColor(SDColor c) => "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
        public static Tuple<SDColor, SDColor> GetColorFromRYGGradient(double percentage)
        {
            var red = (percentage > 50 ? 1 - 2 * (percentage - 50) / 100.0 : 1.0) * 255;
            var green = (percentage > 50 ? 1.0 : 2 * percentage / 100.0) * 255;
            var blue = 0.0;
            SDColor result1 = SDColor.FromArgb((int)red, (int)green, (int)blue);
            SDColor result2 = SDColor.FromArgb((int)green, (int)red, (int)blue);
            return new Tuple<SDColor, SDColor>(result1, result2);
        }
    }
}

这是最简单的方法,没有助手,没有转换器,没有奇怪的媒体引用。只需一行:

System.Drawing.Brush _Brush = new SolidBrush(System.Drawing.Color.FromArgb(this.ForeColor.R, this.ForeColor.G, this.ForeColor.B));

通常使用兄弟姐妹或父母的画笔就足够了,这在wpf中很容易通过检索他们的前景或背景属性来实现。

裁判:控制。背景