WPF中的平移缩放和矩阵变换(TranslateTransform、ScaleTransform、MatrixTransform)
2013-09-30 22:17
453 查看
在WPF中的平移缩放都是通过RenderTransform这个类来实现这些效果的,在这个类中,除了平移和缩放还有旋转、扭曲变换、矩阵变换。这些都差不多的,都是坐标的变换。
这里我就先简单弄个平移和缩放吧:
平移呢就是以原来的对象为坐标原点(0,0),然后向X轴、Y轴进行平移变换。缩放呢有几个属性,ScaleX、ScaleY属性表示对象在X、Y轴进行缩放的倍数,CenterX 和 CenterY属性指定一个中心点。
下面有一个平移和缩放的简单的demo,用鼠标拖图片放进行平移,点击按钮来进行缩放,同时在缩放时让图片回到窗口的中央:
View Code
上面是用了TranslateTransform、ScaleTransform,还有一个MatrixTransform,这个是其他变换的底层的实现,是通过矩阵的运算来得到的。可以更加灵活的运动变换。
这个可以仔细的学习一下:
可以看到上面这个,Matrix里面的是什么意思呢,首先看简单的[OffsetX OffsetY]这两个。这两个是跟平移有关,很简单,就是一个简单的矩阵的加减法,比如[1,1]+[1,0]=[2,1]。这个就表示(1,1)这个点在X轴上平移一个单位可以到(2,1)。同理:[1,1]+[0,1]=[1,2]。这个就是在Y轴上平移一个单位。
然后来看缩放:
这个矩阵的乘法表示(1,2)这个点通过乘一个矩阵后变为(3,8),X轴变为原来3倍,Y轴变为4倍。
然后呢这个中间乘的矩阵就是上面M11和M22。就可以控制缩放的倍数。
同样的,剩下的两个
就是用来控制旋转的啦。
所以,就可以通过几个矩阵的结合来一次性的旋转、平移、缩放等等操作。上面都是2*2的矩阵,其实有3*3的矩阵的,就是本人数学较烂。就找个图贴贴总结下吧。
最终坐标:即是说最终坐标 (x1,y1) : x1 = x0 * M11 + x0 * M21 + OffsetX , y1 = y0 * M12 + y0 * M22 + OffsetY.
好了,这样MatrixTransform 就可以进行使用了。例子还没写=-= 以后补充吧。
先把上面那个简单的平移缩放的DEMO放着:NO1
这里我就先简单弄个平移和缩放吧:
平移呢就是以原来的对象为坐标原点(0,0),然后向X轴、Y轴进行平移变换。缩放呢有几个属性,ScaleX、ScaleY属性表示对象在X、Y轴进行缩放的倍数,CenterX 和 CenterY属性指定一个中心点。
下面有一个平移和缩放的简单的demo,用鼠标拖图片放进行平移,点击按钮来进行缩放,同时在缩放时让图片回到窗口的中央:
private void ScalingAndtranslation(string str) { var group = grid.FindResource("trasformView") as TransformGroup; var scaleTransform = group.Children[0] as ScaleTransform; var translateTransform = group.Children[1] as TranslateTransform; var mainWindowPoint = new Point(window.ActualWidth / 2, window.ActualHeight / 2); var imagePoint = new Point(Image1.ActualWidth / 2, Image1.ActualHeight / 2); scaleTransform.CenterX = imagePoint.X; scaleTransform.CenterY = imagePoint.Y; if (str == "amplify") { scaleTransform.ScaleX += 0.2; scaleTransform.ScaleY += 0.2; } else if (str == "reduce" && scaleTransform.ScaleX > 0.1) { scaleTransform.ScaleX -= 0.2; scaleTransform.ScaleY -= 0.2; } if (translateTransform.X != 0 || translateTransform.Y != 0) { translateTransform.X = translateTransform.X - sumx; translateTransform.Y = translateTransform.Y - sumy; } }
View Code
上面是用了TranslateTransform、ScaleTransform,还有一个MatrixTransform,这个是其他变换的底层的实现,是通过矩阵的运算来得到的。可以更加灵活的运动变换。
这个可以仔细的学习一下:
<MatrixTransform Matrix="M11 M12 M21 M22 OffsetX OffsetY"></MatrixTransform>
可以看到上面这个,Matrix里面的是什么意思呢,首先看简单的[OffsetX OffsetY]这两个。这两个是跟平移有关,很简单,就是一个简单的矩阵的加减法,比如[1,1]+[1,0]=[2,1]。这个就表示(1,1)这个点在X轴上平移一个单位可以到(2,1)。同理:[1,1]+[0,1]=[1,2]。这个就是在Y轴上平移一个单位。
然后来看缩放:
这个矩阵的乘法表示(1,2)这个点通过乘一个矩阵后变为(3,8),X轴变为原来3倍,Y轴变为4倍。
然后呢这个中间乘的矩阵就是上面M11和M22。就可以控制缩放的倍数。
同样的,剩下的两个
就是用来控制旋转的啦。
所以,就可以通过几个矩阵的结合来一次性的旋转、平移、缩放等等操作。上面都是2*2的矩阵,其实有3*3的矩阵的,就是本人数学较烂。就找个图贴贴总结下吧。
最终坐标:即是说最终坐标 (x1,y1) : x1 = x0 * M11 + x0 * M21 + OffsetX , y1 = y0 * M12 + y0 * M22 + OffsetY.
好了,这样MatrixTransform 就可以进行使用了。例子还没写=-= 以后补充吧。
先把上面那个简单的平移缩放的DEMO放着:NO1
相关文章推荐
- 【C#/WPF】Image图片的Transform变换:平移、缩放、旋转
- transform样式的学习包含四个属性:translate平移,rotate旋转,scale缩放,skew斜切
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)(转载)
- c#,利用WPF的ScaleTransform和TranslateTransform实现图片的缩放效果
- Transform【缩放、平移、旋转】
- 图像处理---关于像素坐标矩阵变换(平移,旋转,缩放,错切)
- WPF 3D:使用变换中的TranslateTransform3D
- c#,利用WPF的ScaleTransform和TranslateTransform实现图片的缩放效果
- TranslateTransform in WPF
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- WPF 3D:使用变换中的TranslateTransform3D
- iOS中使用transform的缩放、平移、旋转
- Xcode9学习笔记11 - 视图的平移、旋转、缩放等操作(transform)
- 控件的平移旋转缩放transform
- CSS3属性transform(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
- wpf 图片平移、旋转和缩放
- WPF TranslatePoint/TransformToVisual 总返回零
- iOS 【CGAffineTransform方法类-视图缩放、旋转和平移】