当前位置:C++技术网 > 资讯 > GDI+矩阵变换的基础总结

GDI+矩阵变换的基础总结

更新时间:2015-12-07 11:23:22浏览次数:1+次

GDI+中引入了一个重要的概念:坐标变换,这其实也是矩阵变换。

在《文字特效处理之旋转字体》一文中我介绍了三种变换类型,下面我们详细介绍下。


Matrix matirx;
matrix.Rotate(30);///////旋转30°
matrix.Scale(1.0,2.0,MatrixOrderAppend);///////垂直方向上放大2倍
matrix.Translate(5.0,0.0,MatrixOrderAppdend)////////水平方向上平移5个单位
MatrixOrderAppend是将矩阵后置,即在放置在已有的矩阵的右边,矩阵的位置不同,运算结果也是不同的,这点你知道就行了。对于缩放变换来讲,其进行的矩阵变换是乘法。而对于平移变换矩阵变换则是相加。因此当缩放变换里的参数如果是1的话,则不进行缩放。平移变换如果是0的话,则不进行平移。
默认情况下,GDI+使用绘图平面(窗口客户区域)的左上角作为坐标系的坐标原点。假设想让坐标系的坐标原点为绘图平面的其他位置,例如,将坐标原点设置成在水平方向上右移100个像素,在垂直方向上下移50个像素。下图为在这种情况下的绘图平面的坐标信息:


那么此时如果要使用DrawLine(&myPen,0,0,160,80)绘图的话,那么应当是这样的:


而我们的GDI+中graphics类对这种变换进行了设置。那就是我们的平移变换函数-Translateform,他可以进行坐标系的变换。
在《汽车里程表的绘制》里有这样一个函数ResetTransform,该函数主要用来重置已经作用在绘图平面上的所有坐标变换,因为,任何实施在绘图平面上的变换都是在原有的坐标变换基础上进行的也就是窗口客户区域。
ScaleTransform参数若为负数,举个例子,ScaleTransform(1,-1)函数便是在垂直方向上进行变换,而且是倒置变换,因为他是负数缩放因子