WPF,Silverlight与XAML读书笔记第三十五 - 可视化效果之图像
2013-01-06 09:06
330 查看
说明:本系列基本上是《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属性的原因是可以实现如旋转等特点。
示例:
<Image> <Image.Source> <BitmapImage UriSource="Logo.jpg" Rotation="Rotate270" /> </Image.Source> </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 |
<Button Width="100">Bevel <Button.BitmapEffect> <BevelBitmapEffect/> </Button.BitmapEffect> </Button>
WPF同样提供了一个BitmapEffectGroup类用于将多个位图效果组合在一起,BitmapEffectGroup的使用方式与普通的BitmapEffect一样,如:
<Button Width="100">Bevel <Button.BitmapEffect> <BitmapEffectGroup> <BevelBitmapEffect/> <DropShadowBitmapEffect/> <OuterGlowBitmapEffect/> </BitmapEffectGroup> </Button.BitmapEffect> </Button>
同一个BitmapEffect也可以被多次叠加使用:
<Button Width="100">Bevel <Button.BitmapEffect> <BitmapEffectGroup> <DropShadowBitmapEffect/> <DropShadowBitmapEffect/> <DropShadowBitmapEffect/> <DropShadowBitmapEffect/> <DropShadowBitmapEffect/> <DropShadowBitmapEffect/> </BitmapEffectGroup> </Button.BitmapEffect> </Button>
注意:位图效果的性能问题
位图效果在UI线程进行渲染而非渲染线程(前者使用软件计算,后者可借助硬件加速)。对性能的产生的影响会随着位图效果的增多,应该只在小的静态的内容中应用位图效果。
本文完
参考:
《WPF揭秘》
相关文章推荐
- WPF,Silverlight与XAML读书笔记第四十一 - 可视化效果之其它可视化元素
- WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形
- WPF,Silverlight与XAML读书笔记第三十四 - 可视化效果之2D变换
- WPF,Silverlight与XAML读书笔记第三十一 - 可视化效果之布局概览 & 尺寸
- WPF,Silverlight与XAML读书笔记第三十三 - 可视化效果之布局内容溢出处理
- WPF,Silverlight与XAML读书笔记第三十二 - 可视化效果之布局定位
- WPF,Silverlight与XAML读书笔记第三十七 - 可视化效果之Brush
- WPF,Silverlight与XAML读书笔记第三十六 - 可视化效果之Visual
- WPF,Silverlight与XAML读书笔记第四十 - 可视化效果之动画
- WPF,Silverlight与XAML读书笔记第四十四 - 外观效果之样式
- WPF,Silverlight与XAML读书笔记第四十五 - 外观效果之模板
- WPF,Silverlight与XAML读书笔记第四十六 - 外观效果之三皮肤与主题
- WPF,Silverlight与XAML读书笔记第二十二 - 控件之四 – 内容控件之带头的容器控件
- WPF/Silverlight深度解决方案:(四)基于像素的图像合成(For WPF)
- WPF/Silverlight深度解决方案:(四)基于像素的图像合成(For WPF)
- WPF,Silverlight与XAML读书笔记第三十 - 绘图系统概览
- WPF,Silverlight与XAML读书笔记第二十 - 控件之二 – 内容控件(命令控件)
- WPF,Silverlight与XAML读书笔记第一 - XAML命名空间相关话题
- WPF/Silverlight深度解决方案:(四)基于像素的图像合成(For WPF)
- WPF/Silverlight深度解决方案:(四)基于像素的图像合成(For WPF)