C#学习之GDI + 图形编程基础(一)

时间:2021-05-05 19:13:36

----------图形概述

        GDI+是如何工作的呢?为了弄清这个问题,让我们来分析一个示例—绘制一条线段。实质上,一条线段就是一个从一个开始位置(X0,Y0)到一个结束位置(Xn,Yn)的一系列像素点的集合。为了画出这样的一条线段,设备(在本例中指显示器)需要知道相应的设备坐标或物理坐标。

        然而,开发人员不是直接告诉该设备,而是调用GDI+的drawLine()方法,然后,由GDI+在内存(即“视频内存”)中绘制一条从点A到点B的直线。GDI+读取点A和点B的位置,然后把它们转换成一个像素序列,并且指令监视器显示该像素序列。简言之,GDI+把设备独立的调用转换成了一个设备可理解的形式;或者实现相反方向的转换。 

C#学习之GDI + 图形编程基础(一)

------------基本图形结构

    GDI+使用Point结构表示一个点。这是一个二维平面上的点-- 一个像素的表示方式。许多GDI+函数例如DrawLine(),都把Point作为其参数。声明和构造Point的代码如下所示:

Point p = new Point(1, 1);
     公共属性X和Y可以获得和设置Point的坐标。其中X和Y属性的类型是 int
      GDI+还使用 PointF结构表示一个点。 PointF结构与Point结构完全相同,但X和Y属性的类型是 float,而不是 int。 

-------------Size结构

     Size表示一个尺寸(像素)。Size结构包含宽度和高度。声明和构造Size的代码如下所示:

Size s = new Size(5, 5);
      公共属性 HeightWidth可以获得和设置 Size的宽度和高度。其中 HeightWidth类型为int。上例表示这个矩形s的高和宽均为(5,5)。
GDI+还使用 SizeF结构表示一个尺寸。 SizeF 结构与 Size结构完全相同,但X和Y属性的类型是 float,而不是 int。 

      SizePoint之间可以通过显式转换互相转换,SizeWidthHeight属性转换为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>

-------------Point结构与Size结构的互换

     SizePoint之间可以通过显式转换互相转换,SizeWidthHeight属性转换为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>

--------------Rectangle结构

       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个点和大小。另外,还有其他属性和方法可以完成诸如确定矩形是否与另一个矩形相交,提取两个矩形的相交部分,合并两个矩形等工作。