【WP7】坐标变换

在应用开发的过程中,有时需要使用到坐标变换(平移,旋转,缩放,三维变换等),WP7提供了一下几种坐标变换的方式

  TranslateTransform    平移

  RotateTransform     旋转

  ScaleTransform      缩放

  SkewTransform      倾斜

  CompositeTransform   组合变换

  TranformGroup      变换组

  MatriTransform      矩阵变换

 

  看例子再解释

         <Image Source="img.png" Height="291" HorizontalAlignment="Left" Margin="-523,-89,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="313" >
            <Image.RenderTransform>
                <TransformGroup>
                    <TranslateTransform X="100" Y="100" />
                    <RotateTransform Angle="5" />
                    <ScaleTransform CenterX="180" CenterY="0" ScaleX="0.5" ScaleY="1"/>
                    <SkewTransform AngleX="10" CenterY="10" CenterX="0" CenterY="90" />
                    <CompositeTransform CenterX="250" CenterY="185"  
                    Rotation="45"  
                    SkewX="15" SkewY="15"  
                    ScaleX="1.2" ScaleY="1.2"  
                    TranslateX="230" TranslateY="200"/>
                    <MatrixTransform Matrix="2,0,0,1,12,6"/>
                </TransformGroup>
            </Image.RenderTransform>
        </Image>

  首先定义一个Image控件,在Image里面定义RenderTransform (只能包含一种变换,如果需要使用多种变换,可以使用TransformGroup

  其他应该一看就懂,没什么好解释的,不懂多试几次就会明白,下面介绍一下MatrixTransform    

    这是最复杂的一种变换,它是一个3乘3的矩阵,但是,由于它第3列为0,0,1,所以,其实我们只需设置6个值就够了。它们分别是:

           m11       m12     0
           m21       m22     0
           offsetX  offsetY  1

          m11 ——X轴缩放
          m12 ——Y轴上倾斜
          m21 ——X轴上倾斜
          m22——Y轴缩放
          offsetX ——X轴上的位移
          offsetY ——Y轴上的位移  

         <MatrixTransform Matrix="2,0,0,1,12,6"/>

    表示:X轴放大两倍,Y轴不变,在X轴方向平移12,Y轴方向平移6,无倾斜

  

最后是三维变换,直接看例子和截图  

        <Image Source="img.png" Stretch="Uniform" HorizontalAlignment="Center" VerticalAlignment="Center" Width="320">
            <Image.Projection>
                <PlaneProjection RotationY="45" />
            </Image.Projection>
        </Image>

为了更好的看出效果,这里只设置了Y轴旋转,也可以设置RotationX,RotationZ,大家自己试吧

 

最后,还有C#代码中控制坐标变换的,首先在控件定义时添加RenderTransform

        <Rectangle Height="100" HorizontalAlignment="Left" Margin="91,46,0,0" Name="rectangle1" Stroke="Black" StrokeThickness="1" VerticalAlignment="Top" Width="200" Fill="Red">
            <Rectangle.RenderTransform>
                <TranslateTransform/>
            </Rectangle.RenderTransform>
        </Rectangle>

在代码中访问该变换,设置平移变换的X值为200

        TranslateTransform translate = (TranslateTransform)this.rectangle1.RenderTransform;
        translate.X = 200;

 

  

posted @ 2012-11-06 09:57  bomo  阅读(546)  评论(0编辑  收藏  举报