windows gdi+ 中图形根据绘制区域大小自动缩放功能的实现

fulltimeangel 2012-06-04 09:30:36
我从二维矢量图形数据文件中读取二维矢量图形的数据,如:直线的起点和重点,多边形的顶点数及顶点坐标是否闭合等。上述这些二维矢量图形的坐标值均为直角坐标系下的坐标值,单位为毫米。

现在,我用c#语言开发一个windows 窗体应用程序。将读取的这些二维矢量图形数据绘制到窗体中,窗体中的绘制区域为150毫米×150毫米,起点为(10,10)(单位毫米)。

遇到的问题:1、读取到二维矢量图形大小超出了绘制区域,缩放算法如何写?
2、直角坐标系与Windows 设备坐标的转换如何转换?

目前的解决方法:
目前,缩放算法,我是这样写的,读取数据文件中的所有二维矢量图形数据,分别找出最大和最小的x轴坐标和y轴坐标。
根据minX,maxX,minY,maxY计算缩放比例scale=min((maxX-minX)/150,(maxY-minY)/150);
然后计算各轴的平移量offsetX=10-minX*scale;offsetY=10-minY*scale;(10,10)为绘制区域左上角的坐标。

利用目前的缩放算法,绘制图形数据中的直线、多边形、多短线时时比较容易实现的,但是在绘制圆弧的时候,圆弧的缩放计算,我不知如何写。
请问:
1、圆弧如何缩放?(圆弧的数据有:圆心、半径、起始角度和终止角度)
2、我设计的算法对不对?windows窗体应用程序有没有更简洁的处理方式?
3、我目前的应用场景下,坐标转换如何实现?

请各位有经验的人不吝赐教,感谢!

...全文
394 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaizi65535 2012-06-04
  • 打赏
  • 举报
回复
g.Transform = new Matrix(scale, 0, 0, scale, offsetX, offsetY);
fulltimeangel 2012-06-04
  • 打赏
  • 举报
回复
关于缩放,你可以这么处理:

g.Transform = new Matrix(scale, 0, 0, scale, offsetX, offsetY);//你的计算方式应该没问题

绘制的时候按照你从二维矢量图形文件中取出的原始坐标就可以。

至于坐标变换,我这里临时没有好的建议。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧