[C#绘图]Matrix类
想要从入门到精通一门语言,最好的学习文档就是官方提供的文档,比如说OpenCV的学习,最权威的学习资料还是其官方的学习文档,C#和.net的最好的学习入门文档还是MSDN。但是好多人一开始真的不会用,所以忽略了这宝贵的材料,而去学习一些其它的乱七八糟的资料或者书籍。
我也是刚了解到MSDN的一个使用技巧:如果你想查一个类的用法或者一些类的用法,直接在MSDN中找这个类所在的命名空间,它能告诉你相关的好多东西。下面就来开一下在System.Drawing.Drawing2D这个命名空间下的Matrix类。
概述:
这个类封装表示几何变换的3x3仿射矩阵。此类不能被继承。
命名空间:System.Drawing.Drawing2D
程序集:System.Drawing(在System.Drawing.dll中)
用法:
在GDI+中,可以在Matrix对象中存储仿射变换。由于表示仿射变换的矩阵的第三列总是(0,0,1),因此在构造Matrix对象时,只需要指定前两列的6个数。语句:
Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4)
构造下面图形中显示的矩阵。
复合变换
复合变换是一个接一个的变换序列,看看下面列表中的矩阵和变换(矩阵的本质是其所在空间的一种跃迁(变换)):
| 矩阵A | 旋转90度 |
| 矩阵B | 在x方向上缩放2倍 |
| 矩阵C | 在y方向上平移3个单位 |
在仿射空间中,如果从由矩阵[2 1 1]表示的点(2,1)开始,先后乘以A、B、C,在点(2,1)将按列出的顺序经历三种变换。
[2 1 1]ABC = [-2 5 1]
可以不将复合变换的三部分存储于三个独立的矩阵,而是一起乘以A、B和C来得到存储整个复合变换的单个的3x3矩阵。假定ABC=D,则一个点乘以D得出的结果与一个点先后乘以A、B、C的结果相同。
[2 1 1]D = [-2 5 1]
下图显示了矩阵A、B、C和D

复合变换的矩阵可以通过将几个单独的变换矩阵相乘而得到,这就意味着任何仿射变换的序列均可存储于单个的Matrix对象中。
注意:复合变换的顺序非常的重要。一般来说,先旋转、在缩放、然后平移,与先缩放、再旋转、然后平移是不同的。同样,矩阵相乘的顺序也是重要的。这就对应着矩阵ABC与BAC一般不同。
Matrix类提供了几种构建复合变换的过程:Multiply、RotateAt、Rotate、Scale、Shear和Translate。下面的示例创建了一个复合变换(先选装30度,再在y方向上缩放2倍,让后在x方向上平移5个单位)的矩阵。
Matrix myMatix = new Matix();//将Matrix类的一个新实例初始化为单位矩阵
myMatrix.Rotate(30);
myMatix.Scale(1, 2, MatrixOrder.Append);
myMatix.Translate(5, 0, MatrixOrder.Append);
其中MatrixOrder的两个属性还不知道具体怎么玩?以后探讨。
链接地址:https://msdn.microsoft.com/zh-cn/library/system.drawing.drawing2d.matrix(v=vs.110).aspx
https://msdn.microsoft.com/zh-cn/library/system.drawing.drawing2d.matrixorder(v=vs.110).aspx
[C#绘图]Matrix类的更多相关文章
- [转载]Matrix类的使用
2013-12-18 11:31:00 转载自: http://www.cnblogs.com/mmy0925/archive/2013/01/22/2871009.html 在Android中,对图 ...
- Bitmap、BitmapDrawable、BitmapFactory、Matrix类之间的关系
1.BitmapFactory是一个工具类 Bitmap实现在android.graphics包中.但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化.这必然是 某个辅助类 ...
- Android Matrix类以及ColorMatri
引自:http://www.chinabaike.com/t/37396/2014/0624/2556217.html Android Matrix类以及ColorMatrix类详解 最近在系统学习了 ...
- 使用python解线性矩阵方程(numpy中的matrix类)
这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...
- 定义一个Matrix类,实现矩阵的加法和乘法
#include<iostream> using namespace std; class Matrix { int row;//矩阵的行 int col;//矩阵的列 int **a;/ ...
- android 矩阵处理类:Matrix
在Android中,对图片的处理需要使用到Matrix类,Matrix是一个3 x 3的矩阵,他对图片的处理分为四个基本类型: 1.Translate 2.Scale 3.Rotate 4.Skew ...
- Android 开发之Matrix图片处理类的使用
在Android中,对图片的处理需要使用到Matrix类,Matrix是一个3 x 3的矩阵,他对图片的处理分为四个基本类型: 1.Translate————平移变换 2.Scale————缩放变换 ...
- 实用矩阵类(Matrix)(带测试)
引言: 无意间看到国外一个网站写的Matrix类,实现了加减乘除基本运算以及各自的const版本等等,功能还算比较完善,,于是记录下来,以备后用: #ifndef MATRIX_H #define M ...
- Java Graphics2D类的绘图方法
Graphics2D继承自Graphics,它扩展了Graphics的绘图功能,拥有更强大的二维图形处理能力,提供对几何形状.坐标转换.颜色管理以及文字布局等更精确的控制. Graphics2D定义了 ...
随机推荐
- 面向对象程序设计-C++_课时21引用
数据类型 & 别名=对象名; #include <iostream> using namespace std; int * f(int * x) { (*x)++; return ...
- 关于SYN洪泛攻击简介
在TCP三次握手中,server为了响应一个收到的SYN.分配并初始化连续变量和缓存.然后server发送一个SYNACK进行响应,并等待来自客户的ACK报文段. 假设某客户不发送ACK来完毕该三次握 ...
- Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的使用方法
makefile的规则 makefile的规则例如以下: target ... : prerequisites ... command ... ... target能够是一个object file(目 ...
- 获取第上一个兄弟元素 屏蔽浏览器的差异(PreviousElementSibling)
//获取element上一个兄弟元素 function getPreviousElementSibling(element){ //能力检测 判断是否支持PreviousElementSibling ...
- JavaScript之面向对象学习一
1.通过Object构造函数和对象字面量来创建对象缺点:使用同一个接口创建很多的对象,会产生大量的重复代码.比如我需要创建人的对象,并且需要三类人,医生.工程师.老师,他们可以抽象出很多属性,比如姓名 ...
- Struts2相关注意点
今天开始学习Struts2,有一个小栗子用到了DMI动态方法调用,使用DMI可以减少action的数量简化程序,不用在struts.xml的action中定义method属性.刚开始怎么也不能使用DM ...
- 个人笔记mysql游标
经过测试,mysql游标是无法读取自定义函数计算的结构,mysql自带的函数计算值是可以读取的.
- IC封装
1.QFN •QFN—Quad Flat No-lead Package 四方无引脚扁平封装 2.SOIC •SOIC—Small Outline IC 小外形IC封装 3.TSSOP •TSSOP— ...
- OpenStack安装部署管理中常见问题解决方法
一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...
- 对开发中常见的内存泄露,GDI泄露进行检测
对开发中常见的内存泄露,GDI泄露进行检测 一.GDI泄露检测方法: 在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况. 注意点 ...