使用GDI+变换矩阵实现图形的平移、缩放及旋转

使用GDI+变换矩阵实现图形的平移、缩放及旋转

这段时间用GDI+开发一个适量图形绘制软件,类似于CoreDraw,用于教学之用。刚开始用GDI+提供的变换矩阵Matrix实现图形旋转变换,图形的平移和缩放则自己通过计算实现。后来使用发现通过计算修改了坐标值,图形进行多次缩放之后会变形,特别是缩到特小之后无法还原。所以想改用Matrix一起实现图形平称及缩放,原以为很简单,因为都有现成的接口,没想到实现起来还费了不少劲。
改用Matrix后,先对图形进行缩放后再旋转,一切正常,效果很好。可是先对图形进行旋转后再缩放,问题来了,图形在绘图页面上漂移。这就奇怪了,先后操作有什么不同吗?绘制的时候我可是严格按照先平移,再缩放,最后旋转的顺序完成的啊?
调试发现,先缩放再旋转图形旋转中心点不会改变(以左上角坐标作为缩放基点,以图形中心点做为旋转基点),但是旋转后再缩放,图形的旋转中心点在不停地改变,所以整个图形应用矩阵变换后位置就产生偏移。如下图:
clip_image002
图1    缩放旋转不同顺序区别
怎么办?想来想去,只能在缩放时把图形重新偏移回去,以使图形的中心点可以固定在某个位置。
图形位置调整算法如下:
clip_image004
图形绘制时设置如下变换矩阵:
clip_image006

转载于:https://www.cnblogs.com/xilentz/archive/2010/09/20/1831826.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值