WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示
原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示
为方便描述, 这里仅以正方形来做演示, 其他图形从略。
运行时效果图:
XAML代码:
// Transform.XAML
<Canvas Width="700" Height="700" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas.Resources>
<DrawingBrush x:Key="MyGridBrushResource" Viewport="0,0,100,100" ViewportUnits="Absolute" TileMode="Tile">
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<!--横线-->
<GeometryDrawing Geometry="M0,1 L10,1 M0,2 L10,2 M0,3 L10,3 M0,4 L10,4 M0,5 L10,5 M0,6 L10,6 M0,7 L10,7 M0,8 L10,8 M0,9 L10,9">
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="#CCCCFF" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<!-- 横线100整数倍 -->
<GeometryDrawing Geometry="M0,0 L10,0">
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="DarkOrange" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<!--竖线-->
<GeometryDrawing Geometry="M1,0 L1,10 M2,0 L2,10 M3,0 L3,10 M4,0 L4,10 M5,0 L5,10 M6,0 L6,10 M7,0 L7,10 M8,0 L8,10 M9,0 L9,10">
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="#CCCCFF" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<!-- 竖线100整数倍 -->
<GeometryDrawing Geometry="M0,0 L0,10">
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="DarkOrange" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<!-- 这里是外框线 -->
<Style x:Key="MyGridBorderStyle">
<Setter Property="Border.Background" Value="{StaticResource MyGridBrushResource}"/>
<Setter Property="Border.HorizontalAlignment" Value="Center"/>
<Setter Property="Border.VerticalAlignment" Value="Top"/>
<Setter Property="Border.BorderBrush" Value="Black"/>
<Setter Property="Border.BorderThickness" Value="1"/>
</Style>
</Canvas.Resources>
<!-- 引用方式 -->
<Border Style="{StaticResource MyGridBorderStyle}">
<Canvas Width="700" Height="600">
<!-- // 演示平移 -->
<Canvas Width="800" Height="100" Canvas.Top="0" Canvas.Left="0">
<!-- 不平移-->
<Canvas Width="120" Height="120" Canvas.Left="0" Canvas.Top="0">
<Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>
<!--水平平移10 -->
<Canvas Width="120" Height="120" Canvas.Left="100" Canvas.Top="0">
<Rectangle Width="80" Height="80" Stroke="Black" />
<Rectangle Width="80" Height="80" Stroke="Red">
<Rectangle.RenderTransform>
<TranslateTransform X="10" />
</Rectangle.RenderTransform>
</Rectangle>
</Canvas>
<!--垂直平移10 -->
<Canvas Width="120" Height="120" Canvas.Left="200" Canvas.Top="0">
<Rectangle Width="80" Height="80" Stroke="Black" />
<Rectangle Width="80" Height="80" Stroke="Red">
<Rectangle.RenderTransform>
<TranslateTransform Y="10" />
</Rectangle.RenderTransform>
</Rectangle>
</Canvas>
<!--水平平移10,垂直平移10 -->
<Canvas Width="120" Height="120" Canvas.Left="300" Canvas.Top="0">
<Rectangle Width="80" Height="80" Stroke="Black" />
<Rectangle Width="80" Height="80" Stroke="Red">
<Rectangle.RenderTransform>
<TranslateTransform X="10" Y="10" />
</Rectangle.RenderTransform>
</Rectangle></Canvas>
</Canvas>
<!-- // 演示缩放 -->
<Canvas Width="800" Height="100" Canvas.Top="100" Canvas.Left="0">
<!-- 未缩放时的原始大小-->
<Canvas Width="120" Height="120" Canvas.Left="0" Canvas.Top="0">
<Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>
<!--水平缩放比例:2倍 -->
<Canvas Width="120" Height="120" Canvas.Left="100" Canvas.Top="0">
<Rectangle Width="80" Height="80" Stroke="Red">
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="2" />
</Rectangle.RenderTransform>
</Rectangle>
<Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>
<!--垂直缩放比例2.5倍 -->
<Canvas Width="120" Height="120" Canvas.Left="300" Canvas.Top="0">
<Rectangle Width="80" Height="80" Stroke="Red">
<Rectangle.RenderTransform>
<ScaleTransform ScaleY="2.5" />
</Rectangle.RenderTransform>
</Rectangle>
<Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>
<!--水平、垂直同时缩放2.5倍 -->
<Canvas Width="120" Height="120" Canvas.Left="400" Canvas.Top="0">
<Rectangle Width="80" Height="80" Stroke="Red">
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="2.5" ScaleY="2.5" />
</Rectangle.RenderTransform>
</Rectangle>
<Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>
</Canvas>
<!-- // 演示旋转 -->
<Canvas Width="800" Height="100" Canvas.Top="300" Canvas.Left="0">
<!-- 不旋转-->
<Canvas Width="120" Height="120" Canvas.Left="0" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black" />
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--旋转15度(默认以左上角为旋转中心 -->
<Canvas Width="120" Height="120" Canvas.Left="100" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<RotateTransform Angle="15" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--旋转15度,以右上角为旋转中心 -->
<Canvas Width="120" Height="120" Canvas.Left="200" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<RotateTransform Angle="15" CenterX="80" CenterY="0" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="78" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--旋转15度,以左下角为旋转中心 -->
<Canvas Width="120" Height="120" Canvas.Left="300" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<RotateTransform Angle="15" CenterX="0" CenterY="80" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="78" Canvas.Left="-2" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--旋转15度,以右下角为旋转中心 -->
<Canvas Width="120" Height="120" Canvas.Left="400" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<RotateTransform Angle="15" CenterX="80" CenterY="80" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="78" Canvas.Left="78" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--旋转15度,以正方形的中心点为旋转中心 -->
<Canvas Width="120" Height="120" Canvas.Left="500" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<RotateTransform Angle="15" CenterX="40" CenterY="40" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="38" Canvas.Left="38" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
</Canvas>
<!-- // 演示倾斜 -->
<Canvas Width="800" Height="100" Canvas.Top="400" Canvas.Left="0">
<!-- 原始图形-->
<Canvas Width="120" Height="120" Canvas.Left="0" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black" />
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--沿X轴方向倾斜10度(默认以左上角为原点) -->
<Canvas Width="120" Height="120" Canvas.Left="100" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<SkewTransform AngleX="10" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 倾斜中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--沿Y轴方向倾斜10度(默认以左上角为原点) -->
<Canvas Width="120" Height="120" Canvas.Left="200" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<SkewTransform AngleY="10" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--X轴、Y轴同时倾斜10度(默认以左上角为原点) -->
<Canvas Width="120" Height="120" Canvas.Left="300" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<SkewTransform AngleX="10" AngleY="10" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--设定倾斜中心为矩形的正中心位置,沿X轴倾斜10度 -->
<Canvas Width="120" Height="120" Canvas.Left="400" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<SkewTransform AngleX="10" CenterX="40" CenterY="40" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="38" Canvas.Left="38" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--仍将正方形的中心点作为倾斜中心点,X轴倾斜负10度 -->
<Canvas Width="120" Height="120" Canvas.Left="500" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<SkewTransform AngleX="-10" CenterX="40" CenterY="40" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="38" Canvas.Left="38" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
<!--X轴、Y轴同时倾斜负10度(默认以左上角为原点) -->
<Canvas Width="120" Height="120" Canvas.Left="600" Canvas.Top="20">
<Rectangle Width="80" Height="80" Stroke="Black">
<Rectangle.RenderTransform>
<SkewTransform AngleX="-10" AngleY="-10" />
</Rectangle.RenderTransform>
</Rectangle>
<!-- 旋转中心点 -->
<Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2" />
<!-- 矩形中心点 -->
<Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38" />
</Canvas>
</Canvas>
</Canvas>
</Border>
</Canvas>
WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示的更多相关文章
- 图片在 canvas 中的 选中/平移/缩放/旋转,包含了所有canvas的2D变化,让你认识到数学的重要性
1.介绍 canvas 已经出来好久了,相信大家多少都有接触. 如果你是前端页面开发/移动开发,那么你肯定会有做过图片上传处理,图片优化,以及图片合成,这些都是可以用 canvas 实现的. 如果你是 ...
- WPF/Silverlight中的RichTextBox总结
WPF/Silverlight中的RichTextBox总结 在WPF或者是在Silverlight中有个非常强大的可以编辑的容器控件RichTextBox,有的时间会采取该控件来作为编辑控件.鉴 ...
- WPF,SilverLight中直线的样式示例
原文:WPF,SilverLight中直线的样式示例 XAML代码:// LineStyle.xaml<Viewbox Width="600" Height="50 ...
- 【转载】Unity中矩阵的平移、旋转、缩放
By:克森 简介 在这篇文章中,我们将会学到几个概念:平移矩阵.旋转矩阵.缩放矩阵.在学这几个基本概念的同时,我们会用到 Mesh(网格).数学运算.4x4矩阵的一些简单的操作.但由于克森也是新手,文 ...
- Graphics平移缩放旋转(转载)+点睛
点睛:可以进行多次旋转和平移,也就是平移以后再平移,旋转以后再旋转,有时候一次达不到要求,如果你想一次调整完美的话很麻烦,所以最好多次,上代码 private void btnTranslate_Cl ...
- WPF XAML中 Storyboard.TargetProperty设置TransformGroup指定的变换"RenderTransform.Children
<Grid x:Name="xx" RenderTransformOrigin="0.5,0.5"> <Grid.RenderTransfor ...
- Android图片旋转,缩放,位移,倾斜,对称完整示例(一)——imageView.setImageMatrix(matrix)和Matrix
MainActivity如下: import android.os.Bundle; import android.view.MotionEvent; import android.view.View; ...
- Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix
MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.Vie ...
- WPF/Silverlight深度解决方案:(一)解锁被Storyboard束缚的关联属性
原文 WPF/Silverlight深度解决方案:(一)解锁被Storyboard束缚的关联属性 如果您在使用WPF/Silverlight进行相关动画开发中使用了Storyboard,并对关联属性进 ...
随机推荐
- Apache+windows server2008 外网访问配置
之前在一个服务器上部署一个apache网站,在局域网内都可以访问,但是外网始终访问不了,经常多次谷歌,把解决方案总结出来. 下面就默认部署apache自带的网站.系统:windows server20 ...
- [Android学习笔记]双缓冲绘图技术
双缓冲技术绘图: 什么情况下产生的双缓冲技术?当数据量很大时,绘图可能需要花费很长的时间,这样屏幕就会出现卡顿,闪烁等现象. 什么是双缓冲技术?双缓冲是在内存中创建一个与屏幕绘制区域一致的对象,先将图 ...
- [Android学习笔记]ScrollView的使用
竖直滚动使用ScrollView 水平滚动使用HorizontalScrollView 如果需要禁止ScrollView的滚动,则需要扩展ScrollView类,重写onTouchEvent方法.
- SQL SERVER CHARINDEX函数
CHARINDEX函数经常常使用来在一段字符中搜索字符或者字符串.假设被搜索的字符中包括有要搜索的字符,那么这个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的開始位数.即CHARIN ...
- 性能测试开源小工具——http_load介绍
淘测试 性能测试开源小工具——http_load介绍 meizhu 发表于:2009-07-02 浏览:3552次 评论:1次 所属分类: 性能测试 性能测试开源小工具——http_load介绍 ht ...
- fs学习笔记之输出格式
接触fs那么久,有必要再记录一下. 上一篇介绍了fs拓扑描写叙述文件dot的格式,今天要介绍fs输出文件的格式. 举个样例,下面是d节点输出文件的一行记录,也就是一条流经过d的记录. textexpo ...
- Java程序猿之从菜鸟到职场高手的必看
J2SE之入门引导 Java基础系列之初识JAVA Java基础系列之Java语法 ...
- C语言数组
在C语言中,对于三维或三维以上数组的使用并没有很好的支持,而且使用率也非常的低,后面会对三维数组做一些简单的分析,这篇文章主要以二维数组来探讨一些C语言中数组使用的相关概念和技巧. 1 一个var[i ...
- hdu2089(数位dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间[a,b]内不含有62或4的数的个数. 分析:数位dp,dp[pos][0]表示到第 ...
- 理解Git的工作流程(转)
英文原文:Understanding the Git Workflow 如果你不理解Git的设计动机,那你就会处处碰壁.知道足够多的命令和参数后,你就会强行让Git按你想的来工作,而不是按Git自己的 ...