WPF图形之纯色画刷和渐变画刷的使用

背景介绍
  在WPF中,画刷的使用无处不在,可以说画刷是整个WPF体系里不可或缺的一部分,在画刷中,从渲染效果的特征来看,可以分为纯色画刷、线性渐变画刷、径向渐变画刷。每一种画刷都有其适用的场景,下面将介绍几种画刷在一般场景中的使用。

纯色画刷
  纯色画刷,即SolidColorBrush。在颜色的渲染过程中,当指定的区域的颜色是固定的,没有其它杂色,这时就需要用到纯色画刷。纯色画刷在XAML中和代码中绘制如下:

在XAML中使用SolidColorBrush
1、系统预定义颜色使用
  通过给控件里Brush类定义的属性指定值(如:给Background指定AliceBlue),就可以实现颜色纯色画刷的效果。具体的系统预定义颜色值,可以在Brushes和Colors类里进行查看。

<Button Background="AliceBlue">A Button</Button>

<Button>B Button
    <Button.Background>
        <SolidColorBrush Color="AliceBlue" />
    </Button.Background>
</Button>

2、自定义颜色的使用
  WPF中,通过透明度、红色、绿色、蓝色从32位调色板中选择一种颜色,从32位调色板中选择颜色的格式为"#aarrggbb",其中aa表示指定颜色的透明度用两位十六进制数表示,rr表示红色分量、gg表示绿色分量、bb标识蓝色分量,四个分量中,aa分量不是必须的,不指定的情况下系统默认该分量为FF。

<Button Background="#FFFF0000">A Button</Button>

<Button>B Button
    <Button.Background>
        <SolidColorBrush Color="#FFFF0000" />
    </Button.Background>
</Button>

在代码中使用SolidColorBrush
1、系统预定义颜色使用

Button btn1 = new Button();
btn1.Content = "A Button";
btn1.Background = Brushes.AliceBlue;

Button btn2 = new Button();
btn2.Content = "B Button";
var scb = new SolidColorBrush();
scb.Color = Colors.AliceBlue;
btn2.Background = scb;

2、自定义颜色的使用
  在WPF的后台代码中,从32位调色板选择颜色,比较常用的方式是通过Color.FromArgb或Color.FromRgb进行指定,方法中参数a、r、g、b的值范围为0到255,如下示例代码指定按钮为红色:

Button btn = new Button();
btn.Content = "A Button";
var scb = new SolidColorBrush();
scb.Color = Color.FromArgb(255, 255, 0, 0);
btn.Background = scb;

线性渐变画刷
  线性渐变画刷也即LinearGradientBrush,通过起始位置(StartPoint)以及结束位置(EndPoint)指定渐变轴,由GradientStop指定颜色以及在渐变轴上的位置,从而实现沿着渐变轴方向颜色的线性变化效果。
下面示例显示了三种颜色创建的线性渐变代码
XAML:

<Rectangle Height="200">
    <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0.5, 0" EndPoint="0.5, 1">
            <GradientStop Color="Red" Offset="0.0"/>
            <GradientStop Color="Blue" Offset="0.5"/>
            <GradientStop Color="Green" Offset="1"/>
        </LinearGradientBrush>
    </Rectangle.Fill>
</Rectangle>

C#:

Rectangle rectangle = new Rectangle();
rectangle.Height = 200;
LinearGradientBrush linearBrush = new LinearGradientBrush();
linearBrush.StartPoint = new Point(0.5, 0);
linearBrush.EndPoint = new Point(0.5, 1);
linearBrush.GradientStops.Add(new GradientStop(Colors.Red, 0.0));
linearBrush.GradientStops.Add(new GradientStop(Colors.Blue, 0.5));
linearBrush.GradientStops.Add(new GradientStop(Colors.Green, 1.0));
rectangle.Fill = linearBrush;

  从以上示例代码可以看到LinearGradientBrush的StartPoint和EndPoint属性需要赋值Point类对象,对于Point的x、y坐标,应填0.0到1.0之间的Double值,x、y为0,对应的位置为待渲染颜色区域的左上角,x、y为1,对应的位置为待渲染颜色区域的右下角,通过StartPoint和EndPoint,可以确定渐变轴在待渲染区域的渐变方向。  对于GradientStop,其属性值Color指定32位调色板中任意颜色,其属性Offset指定其沿渐变轴方向从StartPoint到EndPoint的偏移比例,值范围为0.0到1.0的Double类型值,越接近0.0,意味着GradientStop指定的颜色越靠近StartPoint,越接近1.0,则意味着指定的颜色越靠近EndPoint。

径向渐变
  与LinearGradientBrush一样,RadialGradientBrush颜色渐变渲染本质也是沿着渐变轴进行渐变的渲染,与LinearGradientBrush不同地方在于,RadialGradientBrush的渐变轴不是一条,而是无数条,其渐变轴沿着原点向外发散。
如下示例代码显示了三种颜色径向渐变的效果
XAML:

<Rectangle Height="200" Width="200">
    <Rectangle.Fill>
        <RadialGradientBrush Center="0.5, 0.5" GradientOrigin="0.75, 0.25"
                                RadiusX="0.5" RadiusY="0.5">
            <GradientStop Color="Red" Offset="0.0"/>
            <GradientStop Color="Blue" Offset="0.5"/>
            <GradientStop Color="Green" Offset="1.0"/>
        </RadialGradientBrush>
    </Rectangle.Fill>
</Rectangle>

C#:

Rectangle rectangle = new Rectangle();
rectangle.Height = 200;
rectangle.Width = 200;
RadialGradientBrush radialBrush = new RadialGradientBrush();
radialBrush.Center = new Point(0.5, 0.5);
radialBrush.RadiusX = 0.5;
radialBrush.RadiusY = 0.5;
radialBrush.GradientOrigin = new Point(0.75, 0.25);
radialBrush.GradientStops.Add(new GradientStop(Colors.Red, 0.0));
radialBrush.GradientStops.Add(new GradientStop(Colors.Blue, 0.5));
radialBrush.GradientStops.Add(new GradientStop(Colors.Green, 1.0));
rectangle.Fill = radialBrush;

  在使用径向渐变画刷的过程中,其Center属性指定颜色渲染的中心点,RadiusX和RadiusY指定相对于中心点沿x轴和y轴的半径,以确定渲染圆的范围。GradientOrigin确定渐变轴的起始位置,也即是确定上文提到的原点。这几个属性的值比较常用的都是设置在0.0到1.0范围之间。

  以上就是WPF中颜色画刷的使用,每种画刷有自己的适用范围,某个待渲染区域是单一颜色,我们就选择SolidColorBrush。某个待渲染区域是沿着一个方向颜色渐变的,就选择LinearGradientBrush。对某个区域是沿着某个点发散渐变渲染的,例如使控件具有三维外观,那这种时候加入RadialGradientBrush元素将会达到不一样的效果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF是Windows Presentation Foundation的缩写,是一种应用程序框架,可用于在Windows操作系统上开发GUI应用程序。WPF支持三维图形,并可用于制作各种动画效果。 使用WPF制作三维图形动画的方式有许多种,其中一种常见的方式是使用内置的3D图形引擎。该引擎可以使用XAML和C#编程语言创建3D图形,并通过应用程序中特定的命令和事件来控制动画的变化。 在WPF中,使用Camera对象定义场景的观察位置和方向,同时使用Light对象定义灯光的位置和颜色。该方案在创建3D化身对象时会非常有用。 3D图形对象可以由多种形状和几何图形组成,并可以在3D空间中移动、旋转和缩放。例如,可以通过两个三角形扩展到组合实体,这将产生一种复杂的3D对象。 为了创建动画,可以使用WPF的Storyboard功能。Storyboard是一种可将事件、动作和顺序化序列捆绑在一起的集成方式,从而产生复杂而统一的转换效果。在Storyboard中可以定义动画开始和结束的位置、持续时间和缓动函数,以及动画完成后要触发的其他事件。 总结来说,WPF支持三维图形,可用于创建各种动画效果。使用内置的3D图形引擎,可以通过Camera和Light对象定义场景。3D图形对象可以由多种形状或几何图形组成,可以在3D空间中移动、旋转和缩放。为了创建动画,可以使用WPF的Storyboard功能。Storyboard是一种将事件、动作和顺序化序列捆绑在一起的集成方式,以产生复杂而统一的转换效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值