与GDI相比, GDI+提供了对变换(Transform)的支持, 这种变换包括平面坐标系的变换,画笔变换,色彩的变换,以及图像的变换。 利用GDI+的实现坐标变换的最主要的特点就是引用了对矩阵的对象的支持,矩阵是变换的核心。 1、简单矩阵变换 ①、平移变换(TranslateTransform) ③、缩放变换(ScaleTransform) GDI+中使用3中坐标系来表示位置信息:世界坐标、页面坐标、设备坐标。例如:Drawline(pen, 0,0,160,80), 绘制一条直线, 传递给drawline的坐标(0,0)和(160,80)世纪上是一个世界坐标。在进行化纤之前进行了两次转换, 现将世界坐标转换成页面坐标, 再将页面坐标转换成设备坐标。 3、绘制平面的简答矩阵变换 ①、平移变换 ②、旋转变换 ③、缩放变换 ①、旋转文本的输出 文本旋转就是改变文本输出的基线。这猴子那个输出特效需要构造新字体来实现,应为在LOGFONT数据结构中的数据成员ifEscapement可以指定基线的方向。 ②、镜像文本输出 镜像文本输出就是让文本绕着水平或垂直方向翻转输出。镜像输出的原理在于让绘图平面的坐标系进行正负因子的缩放。 4、对绘图平面试试复杂的坐标变换 1、GDI+使用Matrix类表示矩阵变换,矩阵的构造由下列几种方式 Matrix(); Matrix(m11, m12, m21, m22, dx, dy); Matrix(Rect& rect, Point* dstplg); Matrix(Rect& rect, PointF* dstplg); 其中第2第3的构造函数中, 参数所构成的矩阵是: 2、矩阵的前置和后缀 矩阵的前置和后缀代表在进行矩阵运算时, 该剧真相对于另一个矩阵的位置。GDI+中变换相关的函数都可以显示的知名矩阵的运算顺序。如RotateTransform函数 , 奇函数定义为:status RotateTransform(REAL angle, MatrixOrder order); angle:表示需要旋转的角度 order:进行旋转时,变换矩阵相对绘图平面的坐标信息的运算顺序。 enum MatrixOrder { MatrixOrderPrepend;//矩阵前置, 在已有的矩阵左边放置新矩阵 MatrixOrderAppend;//矩阵后置, 在已有的矩阵右边放置新矩阵 } 3、逆矩阵在变换中的应用 若果有两个矩阵AB = BA = I(单位矩阵), 那么称A(B)为B(A)的逆矩阵。 4、矩阵的复合变换 5、使用矩阵批量修改点信息 6、二阶矩阵运算 7、矩阵的旋转 8、矩阵的投射变换 代码: 9、使用矩阵变换实现文本的变异输出 投影输出: 文字大小渐变特效 |
|
来自: 3D建模仿真 > 《GDI 学习笔记》