常用的繪圖函式
DrawArc繪製一個弧形
範例:graphics.DrawArc(pen,0,0,200,200,90,120)
倒數第二個參數,表示起始度數,最後一個參數是弧形的度數。例如起始度數是90,跨越度數是120的弧形
紅色的是弧形。類似的方法還有DrawPie繪製一個扇形和FillPie填滿一個扇形。都有起始度數,跨越度數。
DrawPolygon繪製多邊形
範例: Point []pt=new Point[]{new Point(0,50),new Point(0,100),new Point(100,100)} pt);
最後一個參數表示張力值,對這個繪製函數,具體我不是很了解,只能大概知道是怎麼一回事。算是不能運用自如吧。
至少要有三個點,才能構成一個曲線。可以看一個圖,我從GDI+參考資料複製過來的。
DrawBezier繪製貝賽爾樣條
範例:graphics.DrawBezier(pen, 100, 0, 200, 20, 0, 80, 100, 100)
樣的四個點貝塞爾組成。第一個點,和最後一個點充當直線的兩點,而另外兩個點充當磁鐵的作用,雖然線條不經過這兩個磁鐵點,但這兩個磁鐵點會把線條往它那邊吸。從而構成了貝賽爾樣條。 路徑GraphicsPathGraphicsPath類屬性System.Drawing.Drawing2D命名空間路徑是各種各樣線條組成的,那麼,矩形也可以看做是由四條直線組成的,圓形也可以看做是由幾個弧形組成的。 所以GraphicsPath類別裡就有了添加各種形狀的路徑函數,如AddLine直線路徑,AddEllipse橢圓路徑,AddRectangle矩形路徑,AddBezier貝塞爾路徑,AddString字串路徑等。 這些路徑加進去了,當然是看不著的,我們可以用Graphics類別裡的DrawPath函式把路徑的軌跡描述出來,用畫筆。 看範例: private void formPaint(Object sender, PaintEventArgs e).Graphics;
Pen pen = new Pen(Color.FromArgb(0, 255, 0), rect = new Rectangle(10, 10, 100, 100); Graphics grcPath le(rect);
grcPath.AddEllipse(rect);
new FontFamily("黑體");
grcPath.AddString("A", famFont, (int)FontStyle.Underron,路徑
graphics.DrawPath(pen, grcPath);
}
路徑畫刷 PathGradientBrush
使用範例:
private void formPaint(Object sender, PaintEventArgs e)
GraphicsPath path = new GraphicsPath();
path.AddRectangle(rect) ;
//創建路徑刷刷
PathGradientBrush brush 點色是白色
brush.CenterColor = Color.White;
SurroundColors = new Color[] { Color.Black };
//以路徑畫刷填入一個長方形 }
上面的中心點顏色為白色,且路徑(點)上的顏色是黑色,也就是說,從中心點到每個路徑上的點,都是白到黑漸變的。
另外也可以自己指定中心點,如果不想用PathGradientBrush計算的中心點,就指定CenterPoint,如brush.CenterPoint = new Point(20, 50);
路徑畫刷多種顏色漸變
//建立路徑
GraphicsPath path = new GraphicsPath();Rectangle rect = new Rectangle(0, angle(rect);
//創建路徑畫筆
//創建ColorBlend對象,並為多種顏色漸進資訊
/指定幾種顏色
color_blend.Colors=new Color[]{Color.Red,Color.Green,Color.White };
//指定顏色的範圍
color_blend.Positions brush.InterpolationColors = color_blend;
//以路徑畫刷填入一個長方形
e。做一條直線,然後這條線的3分之2是什麼顏色到什麼顏色漸變,3分之一又是哪種顏色到哪種顏色漸變。
上面的是紅到綠漸變範圍是:0~2/3,綠到白(中心點顏色):2/3~1; 假設整條直線的長度用1來代替。另外這個也可以自訂中心點位置。
用點構成的路徑畫刷
範例:
private void formPaint(Object sender, PaintEventArgs e)
{
100);
Point []pts=new Point[]{new Point(50,0),new Point (0,100),new Point(100,100)};
PathGradientBrush brush=new Path brush.CenterColor=Color.White;
//路徑點上的顏色
Color[]{Color.Black};
e.Graphics.FillRectangle(brush, rect);
以上的點,路徑畫刷會自動把這些點連接起來(按順序),構成一個圖形的,然後再填充,但填充的範圍只限於這些點構成的圖形內。就像上面,是用這個畫刷填滿一個矩形,
但超出這個三角圖形的部分沒有被填滿。這個跟圖形路徑是一回事,只限於填滿路徑裡面的。這個圖形建立也可以透過GraphicsPath方式來完成,例如裡面的新增AddPolygon多邊形路徑函數。然後再用Graphics類別裡的FillPolygon函數填充。
另外也可以用AddLines加入路徑函數來完成,這個函數是用直來組成的圖形,但究其根底還是用點來組成的,兩點構成一條直線嘛!
不過組成的圖形必須是閉合的,不然無法達到想要的結果。然後調用FillPath填充路徑。
AddLines範例:
private void formPaint(Object sender, PaintEventArgs
GraphicsPath path = new GraphicsPath();Point[] pts = new Point[] { new Point(50, 0), new Point(0, 100), new Point(100, 100)}; PathGradientBrush brush = new PathGradientBrush( path);
//中心點色 brush.SurroundColors=new Color[]{Color.Black};
e.Graphics.Fill , path);
}
FillPath函數就像DrawPath一樣,但DrawPath是用畫筆來描述路徑的,而FillPath是用「填滿」來描述路徑的。
注意FillPath填充的路徑有一定的限制,閉合。不要起衝突。
PathGradientBrush類別裡的SurroundColors屬性成員,路徑點上的多種顏色
private void formPaint(Object sender, PaintEventArgs e)
{ GraphicsPath path = new GraphicsPath();
Rectangle rect = new path.AddRectangle(rect) ;
//創建路徑刷刷
PathGradientBrush brush 點顏色是白色
brush.CenterColor = Color.White;
= new Color[] { Color.Black,Color.Red,Color.Green,Color.Blue };
//以路徑畫刷填入一個矩形🠜) }
四個角點處顏色,用眼睛可以看得出大概的差別,分別是黑,紅,藍,綠。對應左上(0,0),右上(100,0),右下(100,100),
左下(0,100)四個角點。
再來來說一下這個漸變畫刷是怎麼看的,或者說是依據什麼來的。首先在SurroundColos指定了角點(0,0)為Color.Black,
GraphicsPath path = new GraphicsPath();
50, 0), new Point(0, 100), new Point(100, 100) };brush=new PathGradientBrush(path);
//中心點顏色白色.CenterColor=Color.White;
//角點顏色:紅,綠,且藍色。依pts數組順序依序 brush.SurroundColors = new Color[] { Color.Red, Color.Green, Color.Blue }; e.Graphics.FillPath(brush, path);
}
了解上面的知識點後,可以試著做一個五角星圖形的例子(用路徑漸變畫刷,並使用不同的角點顏色)。
更多C# GDI+程式(二)相關文章請關注PHP中文網!