天天看點

【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;