在GDI+中用Mattix类对2D矢量图形进行平移、缩放操作

1.    GDI+中点坐标的格式及矩阵乘法的定义

GDI+中的的点按照1行3列的格式,即(x坐标,y坐标,1),其中1为哑元坐标。变换矩阵为3行3列格式,根据矩阵的乘法,变换后的坐标仍为1行3列的格式。

根据矩阵乘法的定义,A*B与B*A不一定相等,所以在对图形的坐标系实行多种变换时,图形变换的先后顺序将直接影响变换的结果。

在GDI+中,不同变换矩阵的顺序通过MatrixOrder来来调整,默认采用Matrix. Prepend矩阵放置方式,另一种放置方式为Matrix. Append,当矩阵的乘法运算时提供了选项。例如,坐标点P,平移变换矩阵T,比例变换矩阵S,采用P*T*S的顺序时,在GDI中分为两步走:

第一步,T变换:由于是坐标点乘以变换矩阵,不需要对乘法顺序进行选取。

dc.TranslateTransform(150, 150);    //平移变换

第二步,S变换:由于T*S,此时需要说明乘法顺序

dc.ScaleTransform(1.75f, 0.5f, MatrixOrder.Append); //比例变换,后置
dc.ScaleTransform(1.75f, 0.5f);     //比例变换,默认前置
//dc.ScaleTransform(1.75f, 0.5f, MatrixOrder.Prepend);

2.  测试实例

定义一个矩形

Rectangle rect = new Rectangle(0, 0, 150, 150);

不同的变换顺序得到不同的结果。图

1和图2 分别显示了先平移变换后比例变换的结果和先比例变换后平移变换的结果,其中红色表示变换前的图形,蓝色表示中间变换的结果,黑色表示最终的结果。

                                              图1 先平移后缩放

                                            图2 先缩放后平移
 作者采用Mathcad软件验证了上面的结果,如图3所示。
 
                                              图3 角点坐标计算

在GDI+中用Mattix类对2D矢量图形进行平移、缩放操作相关推荐

  1. D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵

    D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵,有需要的朋友可以参考下. D3D中绘画3D模型基本上就是靠3个矩阵World, View, Projection来联合进行模型位置定位.视角定 ...

  2. java的setquality值多少_java使用JPEGEncodeParam类的setQuality方法进行高质量图片缩放类(转)...

    java使用JPEGEncodeParam类的setQuality方法进行高质量图片缩放类(转) 找了很多都不理想,最后找个到老外写的,不得不承认老外写的确实牛B 主要是:JPEGImageEncod ...

  3. C++实现通讯录管理系统(OOP类,链表,文件读取等操作实现通讯录的基本功能)

    这里写自定义目录标题 分析 1.需求分析 2.设计 3.抽象类型定义 通讯录管理系统功能介绍 1.添加联系人 2.查询联系人 3.修改联系人 4.删除联系人 5.显示所有联系人 6.保存到文件 0.退 ...

  4. css定位-css新增选择器(内减,属性,伪类,2d变换,过渡)

    目录 一.定位(重点) 1.静态定位 2.相对定位 3.绝对定位 4.固定定位 5.定位元素的层叠效果 二.css3和css2的区别 1.内减模式 2.新增属性选择器 3.新增伪类选择器 4. 2d变 ...

  5. GDI+有Bitmap类。

    应用例子: 有关GDI+对bmp的处理 数字图像处理算法实现  [ 作者:admin | 转贴自:本站原创 | 点击数:634 | 更新时间:2004-12-31 | 文章录入:admin ] 摘要: ...

  6. Android中用Application类实现全局变量

    在Java中如果要使用全局变量,一般定义public static类型的变量.但是这种方法不符合Android的框架架构,Android中要使用Application context. Applica ...

  7. 如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能

    小白摸索着编写一个上位机界面,将遇到的问题及解决方法记录下,以供后来的小白使用哈.这篇文章解决的问题是在绘图时候的闪烁问题.其中网上有些介绍的设置控制方式controlstyle的方法,这个方法我的理 ...

  8. 在c#中用mutex类实现线程的互斥_面试官经常问的synchronized实现原理和锁升级过程,你真的了解吗...

    本篇文章主要从字节码和JVM底层来分析synchronized实现原理和锁升级过程,其中涉及到了简单认识字节码.对象内部结构以及ObjectMonitor等知识点. 阅读本文之前,如果大家对synch ...

  9. 在c#中用mutex类实现线程的互斥_C# 多线程系列(4)进程同步Mutex类

    Mutex 类 Mutex 中文为互斥,Mutex 类叫做互斥锁.它还可用于进程间同步的同步基元. Mutex 跟 lock 相似,但是 Mutex 支持多个进程.Mutex 大约比 lock 慢 2 ...

最新文章

  1. 【图像超分辨率】RRSGAN: Reference-Based Super-Resolution for Remote Sensing Image
  2. 20145238-荆玉茗 《信息安全系统设计基础》第7周学习总结
  3. 海量url mysql_海量数据mysql优化步骤
  4. 单片机中存储器扩展位地址线怎么算_51单片机CPU结构各部件的原理详细分析
  5. mysql xa_Mysql对XA的支持
  6. 源码--常用的人脸识别数据库
  7. STM32工作笔记0088---时间标志组和同时等待多个内核对象
  8. Linux四剑客详解——grep
  9. fpga开发教程 labview_LabVIEW入门
  10. Diff 算法的执行过程数据响应式模拟routerSnabbdom
  11. Zabbix监控通过企业微信报警
  12. .then()方法的意思和用法
  13. TypeScript 发布 4.9 beta
  14. 安卓实现仿微信点赞好友昵称列表,中间用逗号隔开
  15. Python qrcode二维码操作——(一)简单使用qrcode
  16. 磊科nw705p虚拟服务器设置,教你如何设置磊科nw705p无线路由器的详细步骤【图文】...
  17. 移动端SEO优化需要怎么做排名?
  18. LabVIEW数据采集程序打包中遇到的问题
  19. 机器学习实战六步法之训练模型、优化模型、部署模型(七)
  20. 多家庭物业管理软件市场现状及未来发展趋势

热门文章

  1. 博士生4篇高分论文参加答辩,却遭评委批评:你写的太多了
  2. 空气输入法!浙大最新研究:空中动动手指,就能给智能手表输入文本
  3. BERT轻量化:最优参数子集Bort,大小仅为BERT-large16%
  4. 预、自训练之争:谷歌说预训练虽火,但在标注数据上自训练更有效
  5. 卷积有多少种?一文读懂深度学习中的各种卷积
  6. 如何轻松阅读 GitHub 上的项目源码?
  7. 越南71岁的工程师,给全世界的机械人送了一份大礼!
  8. 毕业使人头秃:发现自己的idea已经被人发表了,该怎么办?
  9. 应用层网关调研与基础测试
  10. Python设计模式-策略模式