日期:2014-05-18  浏览次数:21128 次

windows gdi+ 中图形根据绘制区域大小自动缩放功能的实现
我从二维矢量图形数据文件中读取二维矢量图形的数据,如:直线的起点和重点,多边形的顶点数及顶点坐标是否闭合等。上述这些二维矢量图形的坐标值均为直角坐标系下的坐标值,单位为毫米。

现在,我用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、我目前的应用场景下,坐标转换如何实现?

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



------解决方案--------------------
g.Transform = new Matrix(scale, 0, 0, scale, offsetX, offsetY);