资源描述:
《13GDI+高级编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第13章GDI+高级编程*本章介绍GDI+的路径、区域、变换、图像处理和图元文件等高级编程内容。路径由许多不同类型的点所构成,用于表示复杂的不规则图形。区域是由矩形、椭圆、多边形等几何形状组合构成的一种封闭图形,可用于复杂图形的绘制、剪裁和击中测试等。Graphics类可对绘制的图形进行平移、旋转和伸缩变换。矩阵类Matrix则可用于图形、图像、颜色、路径、区域等对象的变换。GDI+的图像处理功能强大,可以加载、保存和操作多种格式的图像。GDI+的图元文件格式为EMF+,可用来保存和重放绘图记录,也能用于交互绘图的重
2、绘操作。13.1路径路径(path)是一系列相互连接的直线和曲线,由许多不同类型的点所构成,用于表示复杂的不规则图形,也叫做图形路径(graphicspath)。路径可被以画轮廓和填充的形式显示输出,也可以用于创建区域和路径渐变刷等。虽然在GDI中也有路径(本书未讲),但是它只是作为DC的一种状态才能存在。独立的路径对象,则是GDI+新增加的。13.1.1图形路径在GDI+中,路径由图形路径类GraphicsPath表示,它是GDI+基类GdiplusBase的直接派生类。1.构造函数GraphicsPath类有三个
3、构造函数:GraphicsPath(FillModefillMode=FillModeAlternate);//构造一个空路径GraphicsPath(constPoint*points,constBYTE*types,INTcount,FillModefillMode=FillModeAlternate);//构造含指定整数型点数组的路径GraphicsPath(constPointF*points,constBYTE*types,INTcount,FillModefillMode=FillModeAlternat
4、e);//构造含指定浮数型点数组的路径79其中:l填充模式参数fillMode在上一章的画填充多边形和曲线时已经讲过,枚举类型FillMode除了可取这里的默认值FillModeAlternate(交替填充模式)之外,还有一个可取的值是FillModeWinding(环绕替填充模式)。l点数组参数points,可以是整数类型的,也可以是浮点数类型的。l点类型数组参数types,主要点类型有路径起点、直线端点和贝塞尔点。l计数参数count为数组points和types的元素数,这两种数组中的元素数必须一致。2.点的种
5、类构造函数中,点的类型取值为枚举类型PathPointType常量;typedefenum{PathPointTypeStart=0,//起点PathPointTypeLine=1,//直线端点PathPointTypeBezier=3,//贝塞尔(曲线的控制)点PathPointTypePathTypeMask=0x7,//点类型掩码(只保留低三位)PathPointTypePathDashMode=0x10,//未使用PathPointTypePathMarker=0x20,//标记点(用于路径分段)PathPo
6、intTypeCloseSubpath=0x80,//闭子路径(图形)的终点PathPointTypeBezier3=3//同PathPointTypeBezier}PathPointType;其中,主要的点类型有起点、直线端点、贝塞尔点、标记点和闭子路径终点。其他曲线类型(如弧、椭圆和基样条曲线等)在路径中都是用贝塞尔曲线来表示的。路径是由点组成的,但这里的点,不光指其坐标位置,还包括点的类型。同样的点坐标,不同的点类型,最后得到的路径可能大相径庭。例如,同一组点,定义两个路径,一个的点类型全是直线端点,另一个的起
7、点之后有3个贝塞尔点,最后才是两个直线点(参见图13-1,其中自定义画点列方法DrawPoints,在画曲线时用过,源码参见14.6.5的1.):Pointpoints[]={Point(40,140),Point(275,200),Point(105,225),Point(190,300),Point(50,350),79Point(20,180)};//定义点数组//定义点类型数组(为了节省篇幅,有些直接用了枚举的整数值)BYTElineTypes[]={PathPointTypeLine,1,1,1,1,1};
8、BYTEtypes[]={PathPointTypeStart,PathPointTypeBezier,3,3,PathPointTypeLine,1};GraphicsPathpath1(points,lineTypes,6),//创建直线路径path2(points,types,6);//创建复合路径Graphicsgraph(pDC->m