WPF绘图与动画(二)

  图形的效果与滤镜

  在UIElement类的成员中你可以找到BitmapEffect和Effect这两个属性,这两个属性都能用来为UI元素添加效果。

  WPF最早的版本里只有BitmapEffect这个属性,这个属性使用CPU的运算能力为UI元素添加效果,这样做的问题是效果一多或者让带有效果的UI元素参加动画,程序的性能会因为CPU资源被大量占用二大幅降低(要么响应变慢,要么刷新或动画变得很卡。)随后的版本,微软决定转用显卡GPU的运算能力为UI元素添加效果,于是添加了Effect这个属性。这样既减少了对CPU的浪费又将应用程序的视觉效果拉平到与游戏程序一个级别。

  

  简单易用的BitmapEffect

  BitmapEffect属性定义在UIElement类中,它的数据类型是BitmapEffect类。BitmapEffect是一个抽象类,所以我们只能用它的派生类实例为UIElement的BitmapEffect属性赋值。BitmapEffect类的派生并不多(这也说明BitmapEffect能产生的界面效果并不是很丰富),包括如下几个:

  BevelBitmapEffect:斜角效果。

  BitmapEffectGroup:复合效果(可以把多个BitmapEffect组合在一起)

  BlurBitmapEffect:模糊效果。

  DropShadowBitmapEffect:投影效果。

  EmbossBitmapEffect:浮雕效果。

  OuterGlowBitmapEffect:外发光效果。

<Window x:Class="WPFLearn.DrawAndAnimation.BitmapEffect"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="BitmapEffect" Height="300" Width="300">
    <Grid>
        <Button Content="Click Me" Grid.Column="0" Grid.Row="0" Margin="20">
            <Button.BitmapEffect>
                <DropShadowBitmapEffect Direction="-45" Opacity="0.75" ShadowDepth="7"/>
            </Button.BitmapEffect>
        </Button>
    </Grid>
</Window>

  丰富多彩的Effect

  使用滤镜插件能获得如下好处:

  ⑴ 提高工作效率。

  ⑵ 得到更专业的效果。

  ⑶ 对使用这的技术水平要求相对较低。

  WPF引进了这种“滤镜插件”的思想,其成果就是UIElement类的Effect属性。Effect属性的数据类型是Effect类,Effect类是抽象类,也就是说UIElement的Effect属性可以接收Effect类的任何一个派生类实例作为它的值。Effect类位于System.Windows.Media.Effect 名称空间中,它的派生类有3个,分别是:

  BlurEffect:模糊效果。

  DropShadowEffect:投影效果。

  ShaderEffect:着色器效果(抽象类)。

  ShaderEffect仍然是个抽象类,它就是留给滤镜插件开发人员的接口。只要你开发出派生字ShaderEffect的效果类,别人就可以直接拿来用。

  开发着色器效果需要使用Pixel Shader语言(简写与Photoshop一样,也是PS)和一些DirectX的知识。PS的最新版本是3.0,可以在微软的官方网站找到他的SDK和开发文档。微软PDC2008和PDC2009的视频中也有一些讲解,https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/index

转载于:https://www.cnblogs.com/bjxingch/articles/7859791.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值