GDI+是如何工作的呢?为了弄清这个问题,让我们来分析一个示例—绘制一条线段。实质上,一条线段就是一个从一个开始位置(X0,Y0)到一个结束位置(Xn,Yn)的一系列像素点的集合。为了画出这样的一条线段,设备(在本例中指显示器)需要知道相应的设备坐标或物理坐标。
然而,开发人员不是直接告诉该设备,而是调用GDI+的drawLine()方法,然后,由GDI+在内存(即“视频内存”)中绘制一条从点A到点B的直线。GDI+读取点A和点B的位置,然后把它们转换成一个像素序列,并且指令监视器显示该像素序列。简言之,GDI+把设备独立的调用转换成了一个设备可理解的形式;或者实现相反方向的转换。
GDI+使用Point结构表示一个点。这是一个二维平面上的点-- 一个像素的表示方式。许多GDI+函数例如DrawLine(),都把Point作为其参数。声明和构造Point的代码如下所示:
Point p = new Point(1, 1);公共属性X和Y可以获得和设置Point的坐标。其中X和Y属性的类型是 int。
Size表示一个尺寸(像素)。Size结构包含宽度和高度。声明和构造Size的代码如下所示:
Size s = new Size(5, 5);公共属性 Height和 Width可以获得和设置 Size的宽度和高度。其中 Height和 Width类型为int。上例表示这个矩形s的高和宽均为(5,5)。
Size和Point之间可以通过显式转换互相转换,Size的Width、Height属性转换为Point对应的X、Y属性;
实例如下:
Size s = new Size(20, 30); Console.WriteLine(s); //Point与Size之间的转换 Point p = new Point(20,10); Console.WriteLine(p); Size newS = (Size)p; Console.WriteLine(newS); Point newP = (Point)newS; Console.WriteLine(newP);<span style="font-family:Microsoft YaHei;font-size:12px;"> </span>
Size和Point之间可以通过显式转换互相转换,Size的Width、Height属性转换为Point对应的X、Y属性;
示例如下:
Size s = new Size(20, 30); Console.WriteLine(s); //Point与Size之间的转换 Point p = new Point(20,10); Console.WriteLine(p); Size newS = (Size)p; Console.WriteLine(newS); Point newP = (Point)newS; Console.WriteLine(newP);<span style="font-family:Microsoft YaHei;font-size:12px;"><strong> </strong></span>
GDI+在许多不同的地方使用这个结构,以指定矩形的坐标。Point结构定义矩形的左上角,Size定义其大小。Rectangle有两个构造函数。一个构造函数的参数是X坐标、Y坐标、宽度和高度,另一个构造函数的参数是Point和Size结构,声明和构建Rectangle的两个示例如下所示:
Rectangle r1 = new Rectangle(1, 2, 5, 6); Point p = new Point(1, 2); Size s = new Size(5, 6); Rectangle r2 = new Rectangle(p, s);有一些公共属性可以获得和设置Rectangle的4个点和大小。另外,还有其他属性和方法可以完成诸如确定矩形是否与另一个矩形相交,提取两个矩形的相交部分,合并两个矩形等工作。