• WPF,Silverlight与XAML读书笔记第三十五 可视化效果之图像


    说明:本系列基本上是《WPF揭秘》的读书笔记。在结构安排与文章内容上参照《WPF揭秘》的编排,对内容进行了总结并加入一些个人理解。

    生成和操作多种格式的图像

    WPF中的图像API大都位于System.Windows.Media.Imaging命名空间中。还有一部分定义于System.Windows.Media命名空间。

    WPF的API支持的图像格式:Bitmap位图(.bmp),JPEG,TIF与TIFF,GIF,WDP(Windows Media Photo),PNG,ICO另外可以通过Windows图像组件(WIC)来扩展WPF,来支持其他图像格式。

    BitmapSource类

    BitmapSource位于PresentationCore.dll中的System.Windows.Media.Imaging命名空间。这是我们下文要介绍的图像类的抽象基类。

    BitmapImage类

    BitmapImage继承自BitmapSource,常与Image控件一起使用。使用BitmapImage而不直接使用Bitmap的Source属性的原因是可以实现如旋转等特点。

    示例:

    1 <Image>
    2     <Image.Source>
    3         <BitmapImage UriSource="Logo.jpg" Rotation="Rotate270" />
    4     </Image.Source>
    5 </Image>


    FormatConvertedBitmap

    FormatConvertedBitmap继承自BitmapImage,其属性说明如下,可由此看出这个类的作用 – 转换图像中颜色的深度。

    • Source:指定图像
    • DestinationFormat:目标格式,定义新的颜色深度,该属性是System.Windows.Media.Pixel类。主要包括以下几类格式:
      • Indexed1,Indexed2,Indexed4和Indexed8:分别提供基于调色板的2色,4色,16色,256色位图。
      • BlackWhite:黑白格式
      • Gray,Gray4,Gray8,Gray16和Gray32:分别提供4色,16色,256色,16位和32位灰度图像。
      • Bgr555:提供15位的颜色格式
      • Bgr565:带有6个绿色位的16位颜色格式
      • Bgb128Float:128位色图像

    位图效果

    位图效果定义于System.Windows.Media.Effects命名空间下,一共有5种,它们可以应用到如UIElement,DrawingGroup及Viewport3DVisual等对象。这些效果被应用于渲染过的光栅输出上。

    下表列出了5种位图效果的效果图,及各自支持的一些属性。

    效果

    属性

    默认值

    效果图(默认值)

    BevelBitmapEffect

    BevelWidth:非负double类型

    EdgeProfile:BulgedUp, CurvedIn, CurvedOut或Linear

    LightAngle:double类型属性,表示以度为单位的角度

    Relief:double类型,0(平的)到1(高的)间一个值

    Smoothness:double类型,0(清楚)到1(模糊)间的值

    5

    Linear

    135

    0.3

    0.2

    BlurBitmapEffect

    Radius:非负的double类型值

    KernelType:Box或Gaussian

    5

    Gaussian

    DropShadowBitmapEffect

    Color:任何颜色(且颜色可以包含alpha通道)

    Direction:double类型属性,表示以度为单位的角度

    Noise:double类型,0(光滑)到1(不光滑)间的值

    Opacity:double类型,0(透明)到1(不透明)间的值

    ShadowDepth:非负的double类型值

    Softness:double类型,0(清楚)到1(模糊)间的值

    Black

    315

    0

    1

    5

    0.5

    EmbossBitmapEffect

    LightAngle:double类型属性,表示以度为单位的角度

    Relief:double类型,0到1间的一个值

    45

    0.44

    OuterGlowBitmapEffect

    GlowGolor:任何颜色(且颜色可以包含alpha通道)

    GlowSize:非负的double类型值

    Noise:double类型,0(光滑)到1(不光滑)间的值

    Opacity:double类型,0(透明)到1(不透明)间的值

    Gold

    5

    0

    1

    应用位图效果的方法很简单,只需要将目标元素的BitmapEffect属性设置为BitmapEffect任一子类的对象即可。如:

    1 <Button Width="100">Bevel
    2     <Button.BitmapEffect>
    3         <BevelBitmapEffect/>
    4     </Button.BitmapEffect>
    5 </Button>

    WPF同样提供了一个BitmapEffectGroup类用于将多个位图效果组合在一起,BitmapEffectGroup的使用方式与普通的BitmapEffect一样,如:

    1 <Button Width="100">Bevel
    2     <Button.BitmapEffect>
    3         <BitmapEffectGroup>
    4             <BevelBitmapEffect/>
    5             <DropShadowBitmapEffect/>
    6             <OuterGlowBitmapEffect/>
    7         </BitmapEffectGroup>
    8     </Button.BitmapEffect>
    9 </Button>

    同一个BitmapEffect也可以被多次叠加使用:

     1 <Button Width="100">Bevel
     2     <Button.BitmapEffect>
     3         <BitmapEffectGroup>
     4             <DropShadowBitmapEffect/>
     5             <DropShadowBitmapEffect/>
     6             <DropShadowBitmapEffect/>
     7             <DropShadowBitmapEffect/>
     8             <DropShadowBitmapEffect/>
     9             <DropShadowBitmapEffect/>
    10         </BitmapEffectGroup>
    11     </Button.BitmapEffect>
    12 </Button>

    注意:位图效果的性能问题

    位图效果在UI线程进行渲染而非渲染线程(前者使用软件计算,后者可借助硬件加速)。对性能的产生的影响会随着位图效果的增多,应该只在小的静态的内容中应用位图效果。

     

    本文完

    参考:

    《WPF揭秘》

  • 相关阅读:
    自动识别文本中最能体现文本的主题和风格的词汇?试想一下,要找到一本 书中使用最频繁的 50 个词
    语言处理任务 NLTK 模块 功能描述
    mysql group by 去重 分类 求和
    isinstance(object, classinfo) class type(name, bases, dict)
    函数式编程 偏函数 生成器 yield
    .bash_profile vs .bashrc
    sh/bash/csh/Tcsh/ksh/pdksh等shell的区别
    从数据库、页面加载速度角度思考 id设计 sku asin
    线性回归
    Oracle OLAP
  • 原文地址:https://www.cnblogs.com/lsxqw2004/p/4629174.html
Copyright © 2020-2023  润新知