GDI+学习之路3--线条、曲线和图形(一)

来源:互联网 发布:mac os 10.12.1 beta4 编辑:程序博客网 时间:2024/06/11 14:29

 

         GDI+的矢量绘图部分被用来绘制线条、绘制曲线和填充图形。

矢量图概览(Overview of Vector Graphics)

         Microsoft Windows GDI+在一个坐标系统中绘制线条、矩形和其它图形,你可以选择各种不同的坐标系统,默认的坐标系统原点为左上角,X轴指向右,Y轴指向下,其度量单位为像素。

电脑显示器在一个矩形点阵(即分辨率)上创建其显示画面,这些点称为图片要素或者象素。不同的显示器其在屏幕上显示的点数不尽相同,并且通常一个独立显示器其显示的象素总数可以由用户进行调节(分辨率是可调整的)

在您采用GDI+绘制线条、矩形和曲线的时候,您需要提供一些关于绘制对象的关键性信息。例如,您可以通过2点确定一条线段,您可以通过一个点、高度和宽度确定一个矩形。GDI+与显示器驱动程序协同工作,来判断哪个象素应该开启用于显示线条、矩形和曲线。下面所示,显示一条从点(4, 2)到点(12, 8)的线条的象素情况。

总的来说,某些基本的构成块已经证明是最对建立二维图形非常有用。这些基本构成块,GDI+均支持,包括:(Lines, Rectangles, Ellipses, Arcs, Polygons, Cardinal splines, Bézier splines

GDI+中的Graphics类提供以下方法来绘制前面列表中的对象:DrawLineDrawRectangleDrawEllipseDrawPolygonDrawArcDrawCurve (用于基数样条)DrawBezier。每个方法都已被重载;也就是说,每种方法都以不同参数列表的变体出现。例如,DrawLine方法的一个变体接受一个Pen对象的地址和四个整型值,而它的另一个变体则接受一个Pen对象地址和两个Point对象引用。

绘制线条、矩形和贝塞尔样条的方法都有其复数形式的伴随方法,这些方法在一次调用中绘制多个项目:DrawLinesDrawRectanglesDrawBeziers。同样地,DrawCurve方法也有一个伴随方法DrawClosedCurve,该函数通过连接曲线的起点和终点创建一个闭合图形。

所有的Graphics类的绘制方法都得关联一个Pen对象。因此,为了绘制任何东西,您必须至少创建2个对象:一个Graphics 对象和一个Pen对象。Pen对象存储被画项目的属性,比如线条宽度、颜色等。Pen对象的地址将作为一个参数传递给绘图方法。例如,一个DrawRectangle方法的变体需要传入一个Pen对象地址和4各整数值作为参数,该方法绘制一个左上角为(20,10)、宽度为100、高度为50的矩形。

myGraphics.DrawRectangle(&myPen, 20, 10, 100, 50);

画笔、线条和矩形(Pen, Lines, and Rectangles)

画笔

所有Graphics对象的绘图方法均需接受一个Pen对象的地址作为参数,可通过Pen对象来设置所绘图形的外观,如

Pen myPen(Color(255, 0, 0, 255), 2);

myGraphics.DrawLine(&myPen, 0, 0, 60, 30);

将从点(0, 0)到点(60, 30)绘制一条宽度为2的蓝色线段。

你可以在构造Pen对象时指定不同的属性来绘制图形的不同外观。例如:

myPen.SetDashStyle(DashStyleDash);

myGraphics.DrawLine(&myPen, 100, 50, 300, 80);

将从点(100, 50)到点(300, 80) 绘制一条虚线。

你也可以通过Pen对象的各方法来设置更多的线条属性。如,SetStartCapSetEndCap方法指定线条末端的样式,可以为扁平、方块、圆角、三角或者用户定义形状。SetLineJoin方法允许您设置线条间的联接方式是斜接(有明显边角)、斜切、圆或者裁剪。下图显示的是具有不同的端点类型和连接方式的线条。

线条

         绘制线条的方法很简单:调用Graphics的对象的DrawLine方法,这是个重载的方法。

一种形式是接受Pen对象的地址、4个整型值分别指示起始点的坐标和终点的坐标。如绘制一条从点(4, 2)到点(12, 6)的线段:

myGraphics.DrawLine(&myPen, 4, 2, 12, 6);

还有一种形式是接受Pen对象的地址、2个分别表示起始点和终点的Point对象的引用。如上例的线段可写成:

Point myStartPoint(4, 2);

Point myEndPoint(12, 6);

myGraphics.DrawLine(&myPen, myStartPoint, myEndPoint);

矩形

绘制矩形的方法如同绘制线条,也是个重载的方法,其中两种形式分别为:myGraphics.DrawRectangle(&myPen, 100, 50, 80, 40);

Rect myRect(100, 50, 80, 40);

myGraphics.DrawRectangle(&myPen, myRect);

Rect对象的某些方法可以控制和收集矩形的有关信息。例如,InflateOffset方法可以改变矩形的尺寸和位置。IntersectsWith方法告诉您一个矩形是否和另一个矩形交叉了,Contains方法则告诉您指定的点是否在一个矩形内部。

椭圆和弧(Ellipses and Arcs)

椭圆

一个椭圆由它的外接矩形来描述。下图显示了一个椭圆和它的外接矩形。

绘制椭圆的方法和绘制矩形一样,如示例:

myGraphics.DrawEllipse(&myPen, 100, 50, 160, 80);

Rect myRect(100, 50, 160, 80);

myGraphics.DrawEllipse(&myPen, myRect);

由于弧为椭圆的一部分,因此只要在绘制椭圆的基础上指定起始角度和扫描角度即可,如:

myGraphics.DrawArc(&myPen, 100, 50, 160, 80, 30, 180);

将绘制一条起始角度为30度,扫描角为180度的弧。

多边形(Polygons)

         多边形是由3个或3个以上的直边所组成的闭合图形。例如,三角形就是3条边所组成,矩形由4条边组成,五角星由5条边所组成。下图显示了几种不同的多边形。

        

         绘制多边形的方法:

         Point myPointArray[] = {Point(0, 0), Point(50, 30), Point(30, 60)};

         myGraphics.DrawPolygon(&myPen, myPointArray, 3);

         它需要含有多边形各点的数组,及点的个数作为参数。

         下图显示了该多边形。

        

 

原创粉丝点击