日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C# GDI+编程(二)

發布時間:2025/7/14 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# GDI+编程(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
常用的繪圖函數 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) 貝塞爾樣條是由四個點構成的。第一個點,和最后一個點充當直線的兩點,而另外兩個點充當磁鐵的作用,雖然線條不經過這兩個磁鐵點, 但這兩個磁鐵點會把線條往它那邊吸。從而構成了貝賽爾樣條。看圖(左邊圖片來源:GDI+參考資料)兩個貝塞樂樣條示例:路徑GraphicsPath 可以到http://hi.baidu.com/3582077/blog/item/8e0204c245d82523e4dd3b47.html里了解一些概念,第九十二個函數。 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),右上(1000),右下(100100), 左下(0100)四個角點。 再來說一下這個漸變畫刷是怎么看的,或者說是依據什么來的。首先在SurroundColos指定了角點(00)為Color.Black, 角點(1000)為Color.Red,而這兩個點可以連成一條直線。這條直線還是漸變的,從黑色到紅色。并且這條直線是在路徑上的。 那么這條路徑(直線)上的各個點就有不同的顏色了。 比如(00)是黑色,(10)是淡一點的黑色,。。。。。(990)是暗紅色(1000)是紅色。 而中心點顏色是白色,這樣中心點到0,0這條直線就是從白色到黑色漸變,而到(10)是從白色到淡一點的黑色漸變。 其它角點上的漸變也是如此。 按著這樣規則就組成了上面的漸變。 再來個三角形的例子: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);} 效果圖:了解上面的知識點后,可以試著做一個五角星圖形的例子(用路徑漸變畫刷,并使用不同的角點顏色)。

轉:http://hi.baidu.com/3582077/item/1d345e6b97e1e237ac3e8352

轉載于:https://www.cnblogs.com/qq1223558/p/3593737.html

總結

以上是生活随笔為你收集整理的C# GDI+编程(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。