原文:浅谈WPF中对控件的位图特效(WPF Bitmap Effects)

--------------------------------------------------------------------------------
引用或转载时请保留以下信息:
大可山 [MSN:a3news(AT)hotmail.com]
http://www.zpxp.com http://www.brawdraw.com
萝卜鼠在线图形图像处理
--------------------------------------------------------------------------------

在WPF中,使用BitmapEffect对所有Visual对象进行位图特效处理(比如文本,按钮,图像,甚至矩形、画布等),它是基于像素级别的,而且是基于软件处理模式而非硬件加速的处理模式
BitmapEffect在控件渲染时起作用,当控件渲染时,该Visual对象转化成相应的BitmapSource并作为BitmapEffect的输入,显示为经过BitmapEffect处理后的效果。
我们可以对控件进行以下几种常见的位图特效处理:
(1)虚化效果(BlurBitmapEffect)
(2)外辉光效果(OuterGlowBitmapEffect)
(3)阴影效果(DropShadowBitmapEffect)
(4)斜面特效(BevelBitmapEffect)
(5)浮雕特效(EmbossBitmapEffect)

由于软件处理模式的效率相对较低,在有大量Visual对象或在有大量动画时慎用,此时你必须在效果与效率之间做一个相对的平衡。

下面先看看虚化效果:


上图:
第一个按钮是未经虚化的按钮效果;
第二个按钮是当Radius="1"时的效果;
第三个按钮是当Radius="2"时的效果;

这是XAML代码:

 <Button  Width="200" Height="30" Content="这是未虚化的按钮" Canvas.Left="24" Canvas.Top="8"/>
 <Button  Width="200" Height="30" Content="这是虚化了的按钮(Radius=1)" Canvas.Top="47" Canvas.Left="24">
    <Button.BitmapEffect>
       <BlurBitmapEffect Radius="1" KernelType="Box" />
  </Button.BitmapEffect>
 </Button>
 <Button  Width="200" Height="30" Content="这是虚化了的按钮(Radius=2)" Canvas.Top="87" Canvas.Left="24">
    <Button.BitmapEffect>
       <BlurBitmapEffect Radius="2" KernelType="Box" />
  </Button.BitmapEffect>
 </Button>

 再来看看外发光效果(辉光效果):


上图:
第一个是对TextBox的做了细微外发光特效处理的显示效果(参数值为:GlowColor="Blue" GlowSize="4" Noise="0.3" Opacity="0.4");

第二个对TextBox的外发光效果"力度比较大",我们发现效果非常明显(参数值:GlowColor="Blue" GlowSize="30" Noise="1" Opacity="0.4")。

这是相应的XAML代码:
 <TextBox Width="200" Canvas.Left="24" Canvas.Top="141">
  <TextBox.BitmapEffect>
   <OuterGlowBitmapEffect GlowColor="Blue" GlowSize="4" Noise="0.3" Opacity="0.4" />
  </TextBox.BitmapEffect>
 </TextBox>
  
  <TextBox Width="200" Canvas.Left="24" Canvas.Top="194">
      <TextBox.BitmapEffect>
        <OuterGlowBitmapEffect GlowColor="Blue" GlowSize="30" Noise="1" Opacity="0.4" />
      </TextBox.BitmapEffect>
    </TextBox> 

在GDI+中,如果要实现虚化等效果,是需要编写大量代码的,比如:虚化效果(外部链接)。而在WPF中,这些效果都已集成到系统中了。

参考链接:
How to: Create Text with a Shadow?
Cool WPF Effects Library
http://blogs.msdn.com/chkoenig/archive/2008/04/29/cool-wpf-effects-library.aspx

浅谈WPF中对控件的位图特效(WPF Bitmap Effects)的更多相关文章

  1. WPF中Ribbon控件的使用

    这篇博客将分享如何在WPF程序中使用Ribbon控件.Ribbon可以很大的提高软件的便捷性. 上面截图使Outlook 2010的界面,在Home标签页中,将所属的Menu都平铺的布局,非常容易的可 ...

  2. WPF中查找控件的扩展类

    在wpf中查找控件要用到VisualTreeHelper类,但这个类并没有按照名字查找控件的方法,于是搜索网络,整理出下面这个类,感觉用起来很是方便. 贴出来,供大家参考. /// <summa ...

  3. WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书

    原文:WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书 最近项目中使用弹出控件Popup,发现弹出框的对齐方式在不同的系统中存在不同(Popup在win10上是 ...

  4. WPF中Image控件的Source属性

    原文:WPF中Image控件的Source属性 imgBook 是一个Image控件,在后台代码中我想给它指定Source的属性.我先如下方式进行: Uri uri = new Uri(strImag ...

  5. WPF中PasswordBox控件的Password属性的数据绑定

    原文:WPF中PasswordBox控件的Password属性的数据绑定 英文原文:http://www.wpftutorial.net/PasswordBox.html 中文原文:http://bl ...

  6. 示例:WPF中Slider控件封装的缓冲播放进度条控件

    原文:示例:WPF中Slider控件封装的缓冲播放进度条控件 一.目的:模仿播放器播放进度条,支持缓冲任务功能 二.进度: 实现类似播放器中带缓存的播放样式(播放区域.缓冲区域.全部区域等样式) 实现 ...

  7. WPF中TreeView控件SelectedItemChanged方法的MVVM绑定

    问题描述:左侧treeview控件中点击不同类别的节点时,右侧的页面会显示不同的权限.比如对于My Publications,拥有Modify和Delete两种权限,对于My Subscription ...

  8. WPF中TreeView控件数据绑定和后台动态添加数据(二)

    写在前面:在(一)中,介绍了TreeView控件MVVM模式下数据绑定的方法.在这篇文章中,将总结给节点添加事件的方法,这样说有些不对,总之实现的效果就是点击某个节点,将出现对应于该节点的页面或者数据 ...

  9. WPF中TreeView控件数据绑定和后台动态添加数据(一)

    数据绑定: 更新内容:补充在MVVM模式上的TreeView控件数据绑定的代码. xaml代码: <TreeView Name="syntaxTree" ItemsSourc ...

随机推荐

  1. Android系统开发(7)——标准I/O与文件锁

    一.常用函数 fopen: FILE *fopen(const char *filename, const char *mode); fread: size_t  fread(void *ptz, s ...

  2. 【u243】拓扑排序

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一些历史迷们打算把历史上的一些大事件按时间顺序列出来.但是,由于资料不全,每个事件发生的具体时间都没有 ...

  3. [React] Use React.cloneElement to Modify and Add Additional Properties to React Children

    In this lesson we'll show how to use React.cloneElement to add additional properties to the children ...

  4. php 文件夹是否存在,不存在就创建

    $lujing = "./nihao/wohao"; if(!is_dir($liujing)){ mkdir(iconv("UTF-8", "GBK ...

  5. php.ini 修改上传文件的限制

    打开php.ini,首先找到file_uploads = on ;是否允许通过HTTP上传文件的开关.默认为ON即是开upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就 ...

  6. Swift 语言概览 -自己在Xcode6 动手写2-tableView

    import UIKit class ViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource { va ...

  7. [CSS] Design for Mobile First with Tachyons

    Tachyons provides extensions (-ns, -m, and -l) to many of its classes to help you design for respons ...

  8. 从0開始学习 GitHub 系列之「07.GitHub 常见的几种操作」

    之前写了一个 GitHub 系列,反响非常不错,突然发现居然还落下点东西没写,前段时间 GitHub 也改版了,借此机会补充下. 我们都说开源社区最大的魅力是人人多能够參与进去,发挥众人的力量,让一个 ...

  9. Tomcat结合Apache、Nginx实现高性能的web服务器

    一.Tomcat为什么需要与apache.nginx一起结合使用? Tomcat虽然是一个servlet和jsp容器,但是它也是一个轻量级的web服务器.它既可以处理动态内容,也可以处理静态内容.不过 ...

  10. CGI原理解析之二------WEB服务和CGI交互数据

    #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/wait.h ...