這一課很簡單,學習幾個類即可。
1 尺寸:Size類和SizeF類
Size類是一個表示尺寸的值類型類,具有兩個正常屬性:Width和Height,表示寬度和高度;一個靜態屬性:Empty,表示0尺寸常量(Width屬性和Height屬性均爲0)。
SizeF類和Size類似,區別主要是Size類型對象的屬性爲整數值,SizeF類型對象的屬性爲單精度浮點類型。
看一個簡單的例子:
1 | using System; |
2 | using System.Drawing; |
3 | |
4 | namespace Edu.Study.Graphics.ToolClasses { |
5 | static class Program { |
6 | static void Main(string[] args) { |
7 | // 定義Size類型對象, 寬度200, 高度100 |
8 | Size size = new Size(100, 200); |
9 | // 重新設置寬度爲150 |
10 | size.Width = 150; |
11 | Console.WriteLine(size); |
12 | |
13 | // 將size變量表示的對象和一個寬度300, 高度200的Size對象相加 |
14 | size = Size.Add(size, new Size(300, 200)); |
15 | Console.WriteLine(size); |
16 | |
17 | // 將size變量表示的對象和一個寬度50, 高度20的Size對象相減 |
18 | size = Size.Subtract(size, new Size(50, 20)); |
19 | Console.WriteLine(size); |
20 | |
21 | |
22 | // 定義SizeF類型對象 |
23 | SizeF sizeF = new SizeF(200.123F, 100.321F); |
24 | Console.WriteLine(sizeF); |
25 | |
26 | // 將sizeF變量表示的對象和一個寬度50, 高度50的SizeF對象相加 |
27 | sizeF = SizeF.Add(sizeF, new SizeF(50, 50)); |
28 | Console.WriteLine(sizeF); |
29 | |
30 | // 將sizeF變量表示的對象和一個寬度50, 高度50的SizeF對象相減 |
31 | sizeF = SizeF.Subtract(sizeF, new SizeF(50, 50)); |
32 | Console.WriteLine(sizeF); |
33 | |
34 | // 將SizeF類型對象轉換爲Size類型對象 |
35 | // 得到的Size對象高度寬度屬性不小於原始SizeF對象的高度寬度屬性 |
36 | Console.WriteLine(Size.Ceiling(sizeF)); |
37 | // 將SizeF類型對象轉換爲Size類型對象 |
38 | //得到的Size對象高度寬度屬性爲原始SizeF對象高度寬度屬性四捨六入五成雙的結果 |
39 | Console.WriteLine(Size.Round(sizeF)); |
40 | // 將SizeF類型對象轉換爲Size類型對象, |
41 | // 得到的Size對象高度寬度屬性爲原始SizeF對象高度寬度屬性截掉小數部分的結果 |
42 | Console.WriteLine(Size.Truncate(sizeF)); |
43 | |
44 | // 將Size.Empty賦值給size變量 |
45 | size = Size.Empty; |
46 | Console.WriteLine(size); |
47 | } |
48 | } |
49 | } |
很簡單的代碼,對照註釋就應該可以理解,無需過多講解。
2 座標:Point和PointF類
座標由Point和PointF類表示(整型屬性和浮點數屬性),是一個表示點的座標的值類型類,具有X, Y兩個屬性,表示座標系上的一個點。
注意:.net Framework設定屏幕右上角的點爲(0, 0)座標,並且y軸向下爲正,x軸向右爲正。
其餘和前面的完全類似,參考即可,看範例:
1 | using System; |
2 | using System.Drawing; |
3 | |
4 | namespace Edu.Study.Graphics.ToolClasses { |
5 | static class Program { |
6 | static void Main(string[] args) { |
7 | |
8 | // 定義Point類型對象, 寬度200, 高度100 |
9 | Point point = new Point(100, 200); |
10 | // 重新設置寬度爲150 |
11 | point.X = 150; |
12 | Console.WriteLine(point); |
13 | |
14 | // 將point變量表示的對象和一個寬度300, 高度200的Size對象相加 |
15 | point = Point.Add(point, new Size(300, 200)); |
16 | Console.WriteLine(point); |
17 | |
18 | // 將point變量表示的對象和一個寬度50, 高度20的Size對象相減 |
19 | point = Point.Subtract(point, new Size(50, 20)); |
20 | Console.WriteLine(point); |
21 | |
22 | |
23 | // 定義PointF類型對象 |
24 | PointF pointF = new PointF(200.123F, 100.321F); |
25 | Console.WriteLine(pointF); |
26 | |
27 | // 將pointF變量表示的對象和一個寬度50, 高度50的SizeF對象相加 |
28 | pointF = PointF.Add(pointF, new SizeF(50, 50)); |
29 | Console.WriteLine(pointF); |
30 | |
31 | // 將pointF變量表示的對象和一個寬度50, 高度50的SIzeF對象相減 |
32 | pointF = PointF.Subtract(pointF, new SizeF(50, 50)); |
33 | Console.WriteLine(pointF); |
34 | |
35 | // 將PointF類型對象轉換爲Point類型對象 |
36 | // 得到的Point對象高度寬度屬性不小於原始PointF對象的高度寬度屬性 |
37 | Console.WriteLine(Point.Ceiling(pointF)); |
38 | // 將PointF類型對象轉換爲Point類型對象 |
39 | //得到的Point對象高度寬度屬性爲原始PointF對象高度寬度屬性四捨六入五成雙的結果 |
40 | Console.WriteLine(Point.Round(pointF)); |
41 | // 將PointF類型對象轉換爲Point類型對象, |
42 | // 得到的Point對象高度寬度屬性爲原始PointF對象高度寬度屬性截掉小數部分的結果 |
43 | Console.WriteLine(Point.Truncate(pointF)); |
44 | |
45 | // 將Point.Empty賦值給point變量 |
46 | point = Point.Empty; |
47 | Console.WriteLine(point); |
48 | } |
49 | } |
50 | } |
注意:Point.Add和Point.Subtract方法的第二個參數是一個Size類型對象,PointF類以此類推。
3 邊界:Rectangle和RectangleF類
邊界是一個矩形,由Rectangle類和RectangleF類定義,依舊是值類型對象,具有一個表示左邊界的Left屬性,一個表示上邊界的Top屬性,一個表示寬度Width屬性和一個表示高度Height屬性組成。Rectangle類的屬性爲整數類型,RectangleF類的屬性爲單精度浮點類型。
邊界不僅定義了座標,還定義了尺寸。座標爲該矩形右上角點的左邊,尺寸爲矩形的大小。使用起來也很簡單,看代碼範例即可:
1 | using System; |
2 | using System.Drawing; |
3 | |
4 | namespace Edu.Study.Graphics.ToolClasses { |
5 | static class Program { |
6 | static void Main(string[] args) { |
7 | // 實例化一個左上角座標爲X=10, Y=10, 寬度100, 高度200的矩形 |
8 | Rectangle rect = new Rectangle(10, 10, 100, 200); |
9 | Console.WriteLine(rect); |
10 | // 輸出矩形的右下角座標 |
11 | Console.WriteLine(rect.Right + ", " + rect.Bottom); |
12 | |
13 | // 將矩形的左上角X座標向正方向移動2個單位 |
14 | rect.X += 20; |
15 | Console.WriteLine(rect); |
16 | |
17 | // 獲取矩形左上角座標, 返回一個Point類型對象 |
18 | Console.WriteLine(rect.Location); |
19 | |
20 | // 將矩形的邊長各放大4個單位和6個單位 |
21 | // 左上角X座標向負方向移動2, Y座標向負方向移動3 |
22 | // 右下角X座標向正方向移動2, Y座標向正方向移動3 |
23 | // Rectangle類具備一個普通方法和一個靜態方法, 功能相同 |
24 | Console.WriteLine(Rectangle.Inflate(rect, 2, 3)); // 使用類的靜態方法 |
25 | rect.Inflate(2, 3); // 使用普通方法 |
26 | Console.WriteLine(rect); |
27 | |
28 | // 獲取矩形{X=30,Y=10,Width=100,Height=200}與 |
29 | // 矩形{X=60,Y=90,Width=300,Height=500}的交集矩形 |
30 | // Rectangle類具備一個普通方法和一個靜態方法, 功能相同 |
31 | Console.WriteLine( |
32 | Rectangle.Intersect(rect, new Rectangle(60, 90, 300, 500))); // 使用類的靜態方法 |
33 | rect.Intersect(new Rectangle(60, 90, 300, 500)); // 使用普通方法 |
34 | Console.WriteLine(rect); |
35 | |
36 | // 判斷兩個矩形是否相交 |
37 | Console.WriteLine(rect.IntersectsWith(new Rectangle(100, 90, 70, 200))); |
38 | |
39 | // 移動矩形, X座標向正方向移動50單位, Y座標向正方向移動100單位 |
40 | rect.Offset(50, 100); |
41 | Console.WriteLine(rect); |
42 | |
43 | |
44 | // 下面的代碼演示RectangleF類, 情況和Rectangle完全類似, |
45 | // 請參照Rectangle的代碼理解 |
46 | RectangleF rectF = new RectangleF(10.1F, 10.2F, 100.123F, 200.456F); |
47 | Console.WriteLine(rectF); |
48 | Console.WriteLine(rectF.Right + ", " + rectF.Bottom); |
49 | |
50 | rectF.X += 20; |
51 | Console.WriteLine(rectF); |
52 | |
53 | Console.WriteLine(rectF.Location); |
54 | |
55 | Console.WriteLine(RectangleF.Inflate(rectF, 2.1F, 3.2F)); |
56 | rectF.Inflate(2.1F, 3.2F); |
57 | Console.WriteLine(rectF); |
58 | |
59 | Console.WriteLine(RectangleF.Intersect(rectF, new RectangleF(60, 90, 300, 500))); |
60 | rectF.Intersect(new RectangleF(60, 90, 300, 500)); |
61 | Console.WriteLine(rectF); |
62 | |
63 | Console.WriteLine(rectF.IntersectsWith(new RectangleF(100, 90, 70, 200))); |
64 | |
65 | rectF.Offset(50.99F, 100.01F); |
66 | Console.WriteLine(rectF); |
67 | |
68 | // RectangleF類對象轉化爲Rectangle類對象(四捨六入五成雙) |
69 | rect = Rectangle.Round(rectF); |
70 | Console.WriteLine(rect); |
71 | |
72 | // RectangleF類對象轉化爲Rectangle類對象(取不小於整數) |
73 | rect = Rectangle.Ceiling(rectF); |
74 | Console.WriteLine(rect); |
75 | |
76 | // RectangleF類對象轉化爲Rectangle類對象(小數部分截斷) |
77 | rect = Rectangle.Truncate(rectF); |
78 | Console.WriteLine(rect); |
79 | |
80 | // 取Empty靜態量 |
81 | rect = Rectangle.Empty; |
82 | Console.WriteLine(rect); |
83 | |
84 | // 用左上角座標和右下角座標初始化矩形 |
85 | rect = Rectangle.FromLTRB(10, 20, 50, 90); |
86 | Console.WriteLine(rect); |
87 | } |
88 | } |
89 | } |
注意,Rectangle類和RectangleF類中具有幾個方法,既有普通方法形式,也有靜態方法形式。普通方法會改變當前對象的屬性,靜態方法則返回一個新的矩形對象,不會改變原有矩形對象的屬性。
最後在重申一次,這些類都是值類型類,注意其對象在比較和賦值時候與引用類型對象的區別
本章代碼下載