[C#] WPF - 如何生成随机颜色(Color)和随机画刷(Brush),Color如何转换成Brush?

发布时间:2023-12-31 14:18:06

WPF中Color和Brush基本概念

WPF中的Color和Brush是两种不同的概念,它们之间的关系如下:

  • Color表示一个颜色,由透明度、红、绿、蓝三个分量组成,每个分量的取值范围为0到255。在WPF中,可以使用Color类来表示颜色。
  • Brush表示绘制对象时所用的画刷,它可以设置绘制的颜色、笔触、宽度等属性。在WPF中,可以使用Brush类来表示画刷。

需要注意的是,Color和Brush虽然有关系,但是它们的用途不同。Color主要用于表示颜色,而Brush主要用于设置绘制对象时的画刷属性。

Color结构体和Color.FromArgb,Color.FromRgb函数

函数原型如下:

public static Color FromArgb(byte alpha, byte red, byte green, byte blue);
public static Color FromRgb(byte red, byte green, byte blue);

其中,参数含义如下:

  • alpha:透明度,取值范围为0到255。0表示完全透明,255表示完全不透明。
  • red:红色分量,取值范围为0到255。
  • green:绿色分量,取值范围为0到255。
  • blue:蓝色分量,取值范围为0到255。

函数返回一个Color类型的值,表示对应的颜色。如果传入的参数超出了取值范围,则会抛出ArgumentOutOfRangeException异常。

如何把字符串的颜色转换值成Color对象?

WPF中,可以使用ColorConverter类将字符串转换为Color对象。以下是一个简单的示例:

private System.Windows.Media.Color? CreateColorFromStr(string colorStr = "#FF0000")
{
    // 将颜色字符串转换为Color对象
    System.Windows.Media.Color? color = (System.Windows.Media.ColorConverter.ConvertFromString(colorStr)) as System.Windows.Media.Color?;

    // 输出Color对象的颜色值
    Console.WriteLine("Color值:" + color?.ToString());
    return color;
}

需要注意的是,如果颜色字符串的格式不正确,转换过程可能会失败。因此,在使用ColorConverter.ConvertFromString(colorStr)) ”方法时,应该先检查字符串是否符合颜色格式的要求。

通过Color生成SolidColorBrush对象

Color对象转换为SolidColorBrush对象:

new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 100, 100, 120));

Brushes类

预定义了大量的常用的SolidColorBrush对象,可以查看:?色彩知识,常用颜色色谱表 (360doc.com)

WPF组件和颜色相关的属性(比如background)一般都会被转成Brush对象(比如SolidColorBrush对象)

设置Canvas的background颜色:

设置Line的线条颜色:?

如何生成随机颜色(Color)和随机画刷(Brush)?

private System.Windows.Media.Color GetRandColor(int start = 0, int end = 256)
{
    // 创建一个Random对象
    Random random = new Random();

    // 生成一个0到255之间的随机整数作为红色分量
    byte red = Convert.ToByte(random.Next(start, end));

    // 生成一个0到255之间的随机整数作为绿色分量
    byte green = Convert.ToByte(random.Next(start, end));

    // 生成一个0到255之间的随机整数作为蓝色分量
    byte blue = Convert.ToByte(random.Next(start, end));

    // 将RGB值转换为ARGB格式的颜色值
    System.Windows.Media.Color color = System.Windows.Media.Color.FromArgb(255, red, green, blue);

    return color;

}

private System.Windows.Media.Brush GetRandBrush(int start = 0, int end = 256)
{
    return new System.Windows.Media.SolidColorBrush(CetRandColor(start, end));
}

文章来源:https://blog.csdn.net/u011775793/article/details/135283078
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。