Point和PointF
Point在GDI+的結構中是最簡單的,在數學上它完全等價于一個二維矢量,包含兩個公共整型屬性,表示它與某個特定位置的水平和垂直距離。例如,為了從點A到點B,需要水平移動11個單位,并向下垂直移動11個單位。在坐標圖中使用x和y,可以通過如下代碼創建一個Point結構來表示:
Point ab = new Point(11, 11);
Console.WriteLine("Moved {0} across, {1} down", ab.X, ab.Y);
其中,屬性X和Y都是可讀寫屬性,可以在Point中直接設置這些值,例如下面的代碼:
Point ab = new Point();
ab.X = 11;
ab.Y = 11;
Console.WriteLine("Moved {0} across, {1} down", ab.X, ab.Y);
按照慣例,水平和垂直坐標表示為小寫的x和y,但是對應的Point屬性是大寫的X和Y。這是因為在C#中,公共屬性的一般約定是名稱以大寫字母開頭。
PointF與Point完全相同,但X和Y屬性的類型是float,而不是int。PointF用于坐標不是整數值的情況。已經為這些結構定義了數據類型轉換,這樣就可以把Point隱式地轉換為 PointF。但是上述轉換沒有相應的逆過程,要把PointF轉換為Point,必須顯式地復制值,或使用下面的3個轉換方法,即Round()、Truncate()和Ceiling():
PointF mm = new PointF(20.5F, 10.9F);
Point nn = new Point();
nn.X = (int)mm.X;
nn.Y = (int)mm.Y;
Point ab1 = Point.Roundmm);
Point ab2 = Point.Truncate(mm);
Point ab3 = Point.Ceiling(mm);
PointF mm = nn;
在默認情況下,GDI+是以電腦屏幕上的像素作為單位的,Graphics對象方法把它們接收到的坐標看作其參數的方式。例如,點new Point(20,10)表示在屏幕上水平移動20個像素,向下垂直移動10個像素。通常這些像素從窗口客戶區域的左上角開始測量,如上面的示例所示。但是,情況并不總是如此。例如,在某些情況下,需要以窗口的左上角為原點來繪圖,甚至以屏幕的左上角為原點來繪圖。但在大多數情況下,除非文檔說明書說明,否則都可以假定像素值是相對于客戶區域的左上角的。