C# GDI+編程(二)

來源:互聯網
上載者:User
常用的繪圖函數

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)};
graphics.DrawPolygon(pen, pt);

Point數組指定每個點的位置,和點的數量。DrawPolygon繪製的多邊形是閉合的,DrawPolygon會自動把第一點和最後一個點串連起來。

DrawCurve繪製基數樣條

樣本:Point[] pt = new Point[] { new Point(0, 0), new Point(100, 50),new Point(200,0)};
graphics.DrawCurve(pen, pt, 1.5f);

最後一個參數表示張力值,對這個繪製函數,具體我不是很瞭解,只能大概知道是怎麼一回事。算是不能運用自如吧。

至少要有三個點,才能構成一個曲線。可以看一個圖,我從GDI+參考資料上複製過來的。

DrawBezier繪製貝賽爾樣條

樣本:graphics.DrawBezier(pen, 100, 0, 200, 20, 0, 80, 100, 100)

貝塞爾樣條是由四個點構成的。第一個點,和最後一個點充當直線的兩點,而另外兩個點充當磁鐵的作用,雖然線條不經過這兩個磁鐵點,

但這兩個磁鐵點會把線條往它那邊吸。從而構成了貝賽爾樣條。

路徑GraphicsPath

GraphicsPath類屬性System.Drawing.Drawing2D命名空間

路徑是各種各樣線條組成的,那麼,矩形也可以看做是由四條直線組成的,圓形也可以看做是由幾個弧形組成的。

所以GraphicsPath類裡就有了添加各種形狀的路徑函數,如AddLine直線路徑,AddEllipse橢圓路徑,AddRectangle矩形路徑,

AddBezier貝塞爾路徑,AddString字串路徑等。

這些路徑添加進去了,當然是看不著的,我們可以用Graphics類裡的DrawPath函數把路徑的軌跡描述出來,用畫筆。

看樣本:

private void formPaint(Object sender, PaintEventArgs e)
{
Graphics graphics = e.Graphics;
Pen pen = new Pen(Color.FromArgb(0, 255, 0), 2);
Rectangle rect = new Rectangle(10, 10, 100, 100);
GraphicsPath grcPath = new GraphicsPath();
grcPath.AddRectangle(rect);
grcPath.AddEllipse(rect);
//添加字串路徑
FontFamily famFont = new FontFamily("黑體");
grcPath.AddString("A", famFont, (int)FontStyle.Underline, 80f, rect, null);
//繪製路徑
graphics.DrawPath(pen, grcPath);
}

路徑畫刷 PathGradientBrush

使用樣本:

private void formPaint(Object sender, PaintEventArgs e)
{
//建立路徑
GraphicsPath path = new GraphicsPath();
Rectangle rect = new Rectangle(0, 0, 100, 100);
path.AddRectangle(rect);
//建立路徑畫刷
PathGradientBrush brush = new PathGradientBrush(path);
//中心點顏色是白色
brush.CenterColor = Color.White;
//路徑(點)上的顏色是黑色
brush.SurroundColors = new Color[] { Color.Black };
//用路徑畫刷填充一個矩形
e.Graphics.FillRectangle(brush, rect);
}

上面的中心點顏色是白色,路徑(點)上的顏色是黑色,也就是說,從中心點到每一個路徑上的點,都是白到黑漸層的。

另外也可以自己指定中心點,如果不想用PathGradientBrush計算的中心點,就指定CenterPoint,如brush.CenterPoint = new Point(20, 50);

路徑畫刷多種色彩坡形

多種色彩坡形在之前的線性漸層畫裡已經介紹過了,那麼路徑多種色彩坡形也是大同小異的,直接看樣本吧:

private void formPaint(Object sender, PaintEventArgs e)
{
//建立路徑
GraphicsPath path = new GraphicsPath();
Rectangle rect = new Rectangle(0, 0, 100, 100);
path.AddRectangle(rect);
//建立路徑畫刷
PathGradientBrush brush = new PathGradientBrush(path);

//建立ColorBlend對象,指定多種色彩坡形資訊
ColorBlend color_blend=new ColorBlend();
//指定幾種顏色
color_blend.Colors=new Color[]{Color.Red,Color.Green,Color.White};
//指定顏色的範圍
color_blend.Positions=new float[]{0/3f,2/3f,3/3f};

brush.InterpolationColors = color_blend;
//用路徑畫刷填充一個矩形
e.Graphics.FillRectangle(brush, rect);
}

中心點的顏色是color_blend.Colors數組的最後一個,像多種色彩坡形,你可以把中心點,到路徑上的每一個點,看做一條條直線,然後這條線的3分之2是什麼顏色到什麼色彩坡形,3分之一又是哪種顏色到哪種色彩坡形。

上面的是紅到綠漸層範圍是:0~2/3,綠到白(中心點顏色):2/3~1; 假設整條直線的長度用1來代替。另外這個也可以自訂中心點位置。

用點構成的路徑畫刷

樣本:

private void formPaint(Object sender, PaintEventArgs e)
{
Rectangle rect = new Rectangle(0, 0, 100, 100);
Point []pts=new Point[]{new Point(50,0),new Point(0,100),new Point(100,100)};
PathGradientBrush brush=new PathGradientBrush(pts);
//中心點顏色
brush.CenterColor=Color.White;
//路徑點上的顏色
brush.SurroundColors=new Color[]{Color.Black};
e.Graphics.FillRectangle(brush, rect);
}

這種用點構成的圖形,是路徑畫刷直接建立的,沒有通過GraphicsPath,也可以指定三個以上的點,路徑畫刷會自動把這些點串連起來(按順序),構成一個圖形的,然後再填充,但填充的範圍只限於這些點構成的圖形內。就像上面,是用這個畫刷填充一個矩形,

但超出這個三角圖形的部分沒有被填充。這個跟圖形路徑是一回事,只限於填充路徑裡面的。這個圖形建立也可以通過GraphicsPath方式來完成,比如裡面的添加AddPolygon多邊形路徑函數。然後再用Graphics類裡的FillPolygon函數填充。

另外也可以用AddLines添加路徑函數來完成,這個函數是用直來組成的圖形,但究其根底還是用點來組成的,兩點構成一條直線嘛!

不過組成的圖形必須是閉合的,不然無法達到想要的結果。然後調用FillPath填充路徑。

AddLines樣本:

private void formPaint(Object sender, PaintEventArgs e)
{
//建立路徑
GraphicsPath path = new GraphicsPath();
Rectangle rect = new Rectangle(0, 0, 100, 100);
Point[] pts = new Point[] { new Point(50, 0), new Point(0, 100), new Point(100, 100)};
path.AddLines(pts);
PathGradientBrush brush = new PathGradientBrush(path);
//中心點顏色
brush.CenterColor=Color.White;
//路徑點上的顏色
brush.SurroundColors=new Color[]{Color.Black};

e.Graphics.FillPath(brush, path);

}

FillPath函數就像DrawPath一樣,不過DrawPath是用畫筆來描述路徑的,而FillPath是用“填充”來描述路徑的。

注意FillPath填充的路徑有一定的限制,閉合。不要起衝突。

PathGradientBrush類裡的SurroundColors屬性成員,路徑點上的多種顏色

在之前,我只指定了一種顏色,SurroundColors是個Color數組,那麼它就可以指定多種顏色。指定的是一個圖形上角點的顏色,

比如三角形,它有三個角,就可以給這三個角點指定不同的三種顏色,但不能是四種顏色,因為三角形只有三個角,超出範圍了就會出錯。

矩形也一樣的,可以指定四種顏色,但如果指定的顏色數量少於角點數,比如矩形,我只指定一個角點的顏色。

那麼剩下的角點都使用的都是SurroundColors數組最後一個顏色值。

拿路徑畫刷的第一個例子來說,我們把它修改一下,指定四個角點的顏色。如下:

private void formPaint(Object sender, PaintEventArgs e)
{
//建立路徑
GraphicsPath path = new GraphicsPath();
Rectangle rect = new Rectangle(0, 0, 100, 100);
path.AddRectangle(rect);
//建立路徑畫刷
PathGradientBrush brush = new PathGradientBrush(path);
//中心點顏色是白色
brush.CenterColor = Color.White;
//指定不同角點的顏色
brush.SurroundColors = new Color[] { Color.Black,Color.Red,Color.Green,Color.Blue };
//用路徑畫刷填充一個矩形
e.Graphics.FillRectangle(brush, rect);
}

四個角點處顏色,用眼睛可以看得出大概的區別,分別是黑,紅,藍,綠。對應著左上(0,0),右上(100,0),右下(100,100),

左下(0,100)四個角點。

再來說一下這個漸層畫刷是怎麼看的,或者說是依據什麼來的。首先在SurroundColos指定了角點(0,0)為Color.Black,

角點(100,0)為Color.Red,而這兩個點可以連成一條直線。這條直線還是漸層的,從黑色到紅色。並且這條直線是在路徑上的。

那麼這條路徑(直線)上的各個點就有不同的顏色了。

比如(0,0)是黑色,(1,0)是淡一點的黑色,。。。。。(99,0)是暗紅色(100,0)是紅色。

而中心點顏色是白色,這樣中心點到0,0這條直線就是從白色到黑色漸層,而到(1,0)是從白色到淡一點的黑色漸層。

其它角點上的漸層也是如此。

按著這樣規則就組成了上面的漸層。

再來個三角形的例子:

private void formPaint(Object sender, PaintEventArgs e)
{
//建立路徑
GraphicsPath path = new GraphicsPath();
Point []pts = new Point[] { new Point(50, 0), new Point(0, 100), new Point(100, 100) };
path.AddLines(pts);

PathGradientBrush brush=new PathGradientBrush(path);
//中心點顏色白色
brush.CenterColor=Color.White;
//角點顏色:紅,綠,藍。按pts數組順序依次
brush.SurroundColors = new Color[] { Color.Red, Color.Green, Color.Blue };
//用路徑畫刷填充路徑
e.Graphics.FillPath(brush, path);
}

瞭解上面的知識點後,可以試著做一個五角星圖形的例子(用路徑漸層畫刷,並使用不同的角點顏色)。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.