您的位置:首页 > 其它

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



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

<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揭秘》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐