Silverlight学习笔记--通用绘图属性

不透明度属性(Opacity)

Opacity属性用于指定刷子的不透明度。 
Opacity 属性的值以 0.0 和 1.0 之间的值表示。默认情况下元素的 Opacity 属性为 1.0。 
如果 Opacity 值为 0,则表示画笔完全透明;如果值为 1,则表示画笔完全不透明。 
如果值为 0.5,则表示画笔的不透明度为 50%;如果值为 0.725,则表示画笔的不透明度为 72.5%, 
依此类推。小于 0 的值将被视为 0,而大于 1 的值将被视为 1。

如下图的代码所示:

<Canvas>
  <Rectangle Height="100" Width="150" Canvas.Left="30" Canvas.Top="30"
      Stroke="Black" StrokeThickness="1" Fill="SkyBlue">
  Rectangle>
  <Rectangle Height="100" Width="150" Canvas.Left="100" Canvas.Top="50"
      Stroke="Black" StrokeThickness="1" Fill="SkyBlue" Opacity="0.5">
  Rectangle>
Canvas>
演示效果为:
image 
左上角矩形不透明度为默认的1,右下角矩形的不透明度为50%,所以重叠部分可以看到左上角的矩形。
 
不透明蒙板(OpacityMask)
有时候,我们对透明度的要求更复杂,并不是希望整个图像都是一个固定的不透明度,这时候就要用到半透明蒙板了。

如下图所示: 我们对一副荷花图片使用不透明蒙板,就可以让荷花图片出现部分区域显示,部分区域不显示的效果。

image

一段演示Xaml代码如下:

<Canvas>
  <Rectangle Height="100" Width="150" Canvas.Left="30" Canvas.Top="30"
      Stroke="Azure" StrokeThickness="1" Fill="SeaGreen">
	  <Rectangle.OpacityMask>
	  	<LinearGradientBrush>
			<GradientStop Offset="0.56" Color="#00000000" />
			<GradientStop Offset="0.25" Color="#FF000000" />
		LinearGradientBrush>
	  Rectangle.OpacityMask>
  Rectangle>
Canvas>

演示效果如下图:

image

这里当然也可以是可以使用 前一篇中提到的 径向渐变刷子(RadialGradientBrush)。如下面例子:

<Canvas>
  <Rectangle Height="100" Width="150" Canvas.Left="30" Canvas.Top="30"
      Stroke="Azure" StrokeThickness="1" Fill="SeaGreen">
	  <Rectangle.OpacityMask>
		  <RadialGradientBrush GradientOrigin="0.7,0.5" Center="0.5,0.5" 
      			RadiusX="0.5" RadiusY="0.4">
      			<GradientStop Color="#00000000" Offset="0" />
      			<GradientStop Color="#FF000000" Offset="1" />
	    RadialGradientBrush>
	  Rectangle.OpacityMask>
  Rectangle>
Canvas>

执行效果如下图:

image

修剪图像(Clip)

有时候我们希望把一个图像作部分修剪,比如下面一副荷花的照片,我们希望修剪成椭圆形。

image (没有经过剪切的图像)

image (带有椭圆型的剪辑区域的图像)

它的剪切代码如下:

<Image 
  Source="sampleImages/Waterlilies.jpg" 
  Width="200" Height="150" HorizontalAlignment="Left">
  <Image.Clip>
    <EllipseGeometry
      RadiusX="100"
      RadiusY="75"
      Center="100,75"/>
  Image.Clip>
Image>

当然除了 EllipseGeometry(椭圆剪切类), 我们还可以使用其它剪切类,比如下面的 RectangleGeometry

<Canvas> 
<Ellipse Height="200" Width="200" Canvas.Left="30" Canvas.Top="30" Stroke="Black" StrokeThickness="10"Fill="SlateBlue"> 
<Ellipse.Clip> 
<RectangleGeometry Rect="0,0,100,100"/> 
Ellipse.Clip
Ellipse
Canvas>

上述代码执行效果:

image

注意,剪切是取得两个的重叠部分。

上面代码我们可以看到是通过设置Geometry的子类来做实现剪切的, Geometry 的子类如下:

System.Object 
  System.Windows.Threading.DispatcherObject 
    System.Windows.DependencyObject 
      System.Windows.Freezable 
        System.Windows.Media.Animation.Animatable 
          System.Windows.Media.Geometry 
            System.Windows.Media.CombinedGeometry 
            System.Windows.Media.EllipseGeometry 
            System.Windows.Media.GeometryGroup 
            System.Windows.Media.LineGeometry 
            System.Windows.Media.PathGeometry 
            System.Windows.Media.RectangleGeometry 
            System.Windows.Media.StreamGeometry

 

图像变形

所有的UI元素都可以变形,包括以下几种变形:

  • 旋转变形(RotateTransform): 根据特定的角度进行物体旋转;
  • 倾斜变形(SkewTransform):根据指定的x-y刻度进行倾斜;
  • 刻度变形(ScaleTransform):根据横向和纵向进行放大和缩小;
  • 翻转变形(TranslateTransform): 水平或横向移动物体;

旋转变形(RotateTransform)

在 二维 x-y 坐标系内围绕指定点按照顺时针方向旋转对象。

演示代码:

<Canvas>
<Rectangle Height="100" Width="100" Canvas.Left="70" Canvas.Top="10" Fill="Black">
	<Rectangle.RenderTransform>
		<RotateTransform Angle="27" />
	Rectangle.RenderTransform>
Rectangle>
Canvas>

演示效果:

image

倾斜变形(SkewTransform)

二维扭曲

演示代码

<Canvas>
<Rectangle Height="100" Width="100" Canvas.Left="70" Canvas.Top="10" 
Fill="Red">
	<Rectangle.RenderTransform>
		<SkewTransform AngleX="15" />
	Rectangle.RenderTransform>
Rectangle>
Canvas>

演示效果

image

刻度变形(ScaleTransform)

在 二维 x-y 坐标系内缩放对象。

演示代码

<Canvas>
<Rectangle Height="100" Width="100" Canvas.Left="70" Canvas.Top="10" 
Fill="Red">
	<Rectangle.RenderTransform>
		<ScaleTransform ScaleX="1.3" ScaleY=".5" />
	Rectangle.RenderTransform>
Rectangle>
Canvas>

演示效果

image

翻转变形(TranslateTransform)

在 二维 x-y 坐标系中平移(移动)对象。

演示代码

<Canvas>
<Rectangle Height="50" Width="50" 
  Fill="#CCCCCCFF" Stroke="Blue" StrokeThickness="2"
  Canvas.Left="100" Canvas.Top="100">
  <Rectangle.RenderTransform>
    <TranslateTransform X="50" Y="50" />
  Rectangle.RenderTransform>
Rectangle>
Canvas>
由于是位移,演示效果截图会不明显,就不提供演示效果图了。

 

组合应用

我们当然可以把上面的变形组合应用,比如下面的例子

演示代码

<Canvas>
<Rectangle Height="100" Width="100" Canvas.Left="70" Canvas.Top="10" 
Fill="Green">
	<Rectangle.RenderTransform>
		<TransformGroup>
		<RotateTransform Angle="45" />
		<ScaleTransform ScaleX=".5" ScaleY="1.2" />
		<SkewTransform AngleX="30"/>
		TransformGroup>
	Rectangle.RenderTransform>
Rectangle>
Canvas>

演示效果

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值