.NEt专家博客!

【李会军】一步一步学Silverlight 2系列(28):图片处理

上一篇 / 下一篇  2008-04-11 21:30:40

概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight 2开发。

本文将介绍在Silverlight 2中进行图片的处理,包括图片的拉伸、裁剪、半透明遮罩等内容。

创建图片

创 建图片,我们可以直接使用Image控件或者在上一篇讲过的ImageBrush,使用ImageBrush可以填充图形或者控件的前景色、背景色等,只 需要指定ImageSource属性。注意,在Silverlight 2 Beta 1中,目前似乎只支持.png格式的图片。

<CanvasBackground="#CDFCAE">
&^?x6s&Q!\` d0<
RectangleCanvas.Left="20"Canvas.Top="80"
gI]e;H%_9W}]0
Width="240"Height="136"RadiusX="15"RadiusY="15">ITPUB个人空间n,q0c&WUCF
<
Rectangle.Fill>
nA Q {!UJ`-M0<
ImageBrushImageSource="a1.png"></ImageBrush>
ES;y oxj3\0</
Rectangle.Fill>ITPUB个人空间0V1Kql6tsv
</
Rectangle>ITPUB个人空间&EeKT.Y$VU:r

5k_pD!PR0<
ImageSource="b1.png"Canvas.Left="320"Canvas.Top="80"></Image>ITPUB个人空间+z W#{"KJ"F3I)R
</
Canvas>

运行后如下所示:ITPUB个人空间XsE ]8NC|
ITPUB个人空间j's&u1C9Z U

图片拉伸

当我们创建了一个图片的时候,如果不指定它的宽度和高度,它将会使用默认的规格来显示;如果指定了高和宽,图片将显示在指定高和宽的矩形区域内。可以通过苏醒Stretch来指定图片如何填充在该区域内,即图片拉伸。Stretch属性具有四个可选值:

None:不对图片进行拉伸以便填充规定的尺寸。

Uniform:按比例进行拉伸,直到有一边满足规定的尺寸区域为止,其余部分不会被填充,按最小尺寸填充。

UniformToFill:按比例进行拉伸,直到完全填充规定的尺寸区域为止,超出该区域的将会被裁剪,按最大尺寸填充。

Fill:不按比例拉伸,完全填充规定的尺寸区域,将会破坏图像的比例。

Stretch默认的属性是Uniform,为了更直观的看到这个四个值的区别,下面看一个例子,我们使用一个规格尺寸为160*90图片,中间带一个小的正方形:
)^-k.S;^u3N:g#r8n:Gf0ITPUB个人空间0C }U ~6f6f

在页面上放置四个Border控件,大小为220*220,并在其中各放置一个Image,图片的大小也定义为220*220,设置四个Image的Stretch属性分别为None、Uniform、UniformToFill、Fill,如下所示:

<CanvasBackground="#CDFCAE">
9hK%}/]#lyb [3os0<
BorderBorderBrush="Black"BorderThickness="3"ITPUB个人空间Z/J1HGH8lL~"`
Width="220"Height="220"Canvas.Left="40"Canvas.Top="50">ITPUB个人空间#b~R1c,p$W(}:_
<
ImageSource="a2.png"Stretch="None"Width="220"Height="220"></Image>
;z k-Y)w d+RB"W0</
Border>ITPUB个人空间9Yz/u9~ \!tA

t'fMI(D0<
BorderBorderBrush="Black"BorderThickness="3"ITPUB个人空间}(i`e EZ
Width="220"Height="220"Canvas.Left="330"Canvas.Top="50">ITPUB个人空间Wc0EMJ$Xp
<
ImageSource="a2.png"Stretch="Uniform"Width="220"Height="220"></Image>
AQV(p;M ~3MoJ5[3`%\D0</
Border>
_(l3WJ/S(b3Q_(]0ITPUB个人空间7v)L(k;u*yb
<
BorderBorderBrush="Black"BorderThickness="3"
dC d*fj$`(C0
Width="220"Height="220"Canvas.Left="330"Canvas.Top="330">ITPUB个人空间A4|3U Yz,v
<
ImageSource="a2.png"Stretch="UniformToFill"Width="220"Height="220"></Image>ITPUB个人空间"_ az2aIv2me
</
Border>ITPUB个人空间D#cS(I7W P K
ITPUB个人空间@(f1ZD)T1o x6f
<
BorderBorderBrush="Black"BorderThickness="3"ITPUB个人空间+qB5y7f)Q#zW
Width="220"Height="220"Canvas.Left="40"Canvas.Top="330">ITPUB个人空间`+V2lw1~^0L&TH
<
ImageSource="a2.png"Stretch="Fill"Width="220"Height="220"></Image>ITPUB个人空间 t,rY&{$dC9s:V8O
</
Border>ITPUB个人空间cuCg8g_/`_3R6I
</
Canvas>

运行后可以很明显的看到这个四个值的区别,如下图所示:

ITPUB个人空间2ZL3L&X/g$yX2v

裁剪图片

有时候我们只需要显示出图片的一部分,可以使用Clip属性对图片进行裁剪,在Clip属性中我们可以设置任意的几何图形,注意是Geometry而非前面讲过的Shape,关于Geometry后面会专门讲到。如下面的例子,裁剪出一个椭圆的区域:

<CanvasBackground="#CDFCAE">
.uJf4\O5I$teP9s @'@0<
ImageSource="a1.png"Canvas.Left="40"Canvas.Top="80"></Image>ITPUB个人空间9[O%s3H$Fy
<
ImageSource="a1.png"Canvas.Left="320"Canvas.Top="80">ITPUB个人空间 G ?#kFRo,T5v
<
Image.Clip>ITPUB个人空间!L-D3\ D$wU
<
EllipseGeometryCenter="120,68"RadiusX="100"RadiusY="60">ITPUB个人空间 mn;t c/v&n
</
EllipseGeometry>ITPUB个人空间,z;S+no;r
</
Image.Clip>ITPUB个人空间QHf;_|5F
</
Image>
+u@K!x:P zl0</
Canvas>

运行后效果如下所示:ITPUB个人空间o$|Wx }6@0o

1C Q7U0a*E0ITPUB个人空间 kKR"J R F

半透明遮罩

使用图片的OpacityMask属性,可以解释为通过用OpacityMask属性指定的画刷的alpha通道值来遮掩图片的alpha通道值, 可以使用的画刷有LinearGradientBrush, RadialGradientBrush和ImageBrush,而对于SolidColorBrush则可以直接通过Opacity属性实现。如下面的 例子,我们对图片做一些渐变的效果:

<CanvasBackground="#CDFCAE">
^VC3~lb2w0<
ImageSource="a1.png"Canvas.Left="160"Canvas.Top="80"Opacity="0.7">ITPUB个人空间9TLR7iCo
<
Image.OpacityMask>ITPUB个人空间vW/b` z7z
<
LinearGradientBrushStartPoint="0,0"EndPoint="1,0">ITPUB个人空间r;H5xS#Mg@
<
GradientStopOffset="0.0"Color="#00000000" />
M0I1` M ^:W\0<
GradientStopOffset="1.0"Color="#FF000000" />ITPUB个人空间nbzz~D
</
LinearGradientBrush>ITPUB个人空间} s2N cr[4[O/|
</
Image.OpacityMask>
4X8IVo?7zn&m9D0</
Image>ITPUB个人空间0k}ct*Mv
</
Canvas>

运行后效果如下:ITPUB个人空间9XLo{vZ0Ai

'Hcr3O.h9YCu:L/em0

结束语

本文介绍了Silverlight中对于图片的处理,在后面我们还将利用这些知识做一个综合实例——实现图片的倒影效果。

作者:TerryLeeITPUB个人空间i8M1?3f&i P{
出处:http://terrylee.cnblogs.com


-Y4Q)Fe^fy&R0


TAG:

引用 删除 Guest   /   2008-09-22 17:16:02
5
引用 删除 Guest   /   2008-08-02 13:45:54
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar