C# GDI+繪圖(二)進階---Pen/Brush以及座標軸平移和旋轉等

上一篇C# GDI+繪圖(一)GDI+介紹及基礎,我們介紹了,GDI+的基礎,這篇我們對其進階內容進行學習,分別爲Pen/Brush以及座標軸操作,

 

1.首先,我們來介紹Pen的詳細用法:

Pen的屬性主要有: Color(顏色),DashCap(短劃線終點形狀),DashStyle(虛線樣式),EndCap(線尾形狀), StartCap(線頭形狀),Width(粗細)等.我們可以用Pen 來畫虛線,帶箭頭的直線等

代碼如下:

            Pen p = new Pen(Color.Blue, 5);//設置筆的粗細爲,顏色爲藍色
            Graphics g = this.CreateGraphics();
            //畫虛線
            p.DashStyle = DashStyle.Dot;//定義虛線的樣式爲點
            g.DrawLine(p, 10, 10, 200, 10);
            //自定義虛線
            p.DashPattern = new float[] { 5, 1 };//設置短劃線和空白部分的數組  5爲虛線長度,1爲虛線間距
            g.DrawLine(p, new Point(10, 20), new Point(20, 200));
            //畫箭頭,只對不封閉曲線有用
            p.DashStyle = DashStyle.Solid;//實線
            p.EndCap = LineCap.ArrowAnchor;//定義線尾的樣式爲箭頭
            g.DrawLine(p, 10, 30, 200, 30);
            g.Dispose();
            p.Dispose();

2.Brush介紹

我們可以用畫刷填充各種圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑等,主要有幾種不同類型的畫刷:

  SolidBrush:畫刷最簡單的形式,用純色進行繪製

  HatchBrush:類似於 SolidBrush,但是可以利用該類從大量預設的圖案中選擇繪製時要使用的圖案,而不是純色

  TextureBrush:使用紋理(如圖像)進行繪製

  LinearGradientBrush:使用沿漸變混合的兩種顏色進行繪製

     PathGradientBrush :基於編程者定義的唯一路徑,使用複雜的混合色漸變進行繪製

Demo代碼如下:

            graphics g = this.creategraphics();
            rectangle rect = new rectangle(10, 10, 50, 50);
            //單色填充
            solidbrush b1 = new solidbrush(color.red);
            g.fillrectangle(b1, rect);
            //字符串
            g.drawstring("字符串", new font("宋體", 10), b1, new pointf(90, 10));

            rect.height = 200;
            rect.width = 200;
            //用圖片填充
            texturebrush b2 = new texturebrush(image.fromfile(@"c:\users\xuan\desktop\1.png"));
            rect.location = new point(10, 70);
            g.fillrectangle(b2, rect);

            //用漸變色填充
            rect.location = new point(10, 250);
            lineargradientbrush b3 = new lineargradientbrush(rect, color.red, color.black, lineargradientmode.forwarddiagonal);
            g.fillrectangle(b3, rect);

3.座標軸變換

在winform中的座標軸和我們平時接觸的平面直角座標軸不同,winform中的座標軸方向完全相反:窗體的左上角爲原點(0,0),水平向左則X增大,垂直下向則Y增大

接下來,我們來實際操作下,通過旋轉座標軸的方向來畫出不同角度的圖案,或通過更改座標原點的位置來平衡座標軸的位置.

            Graphics g = this.CreateGraphics();
            Pen p = new Pen(Color.Blue, 1);
            //轉變座標軸角度
            for (int i = 0; i < 90; i++)
            {
                g.RotateTransform(1);
                g.DrawLine(p, 0, 0, 100, 0);
                //g.ResetTransform();在不重置的情況下,每次轉1°,相當於在重置的情況下,每次轉 i°。(兩種情況下,轉動角度相同)
            }
            //平移座標軸
            g.TranslateTransform(100, 100);
            g.DrawLine(p, 0, 0, 100, 0);
            g.ResetTransform();

            //先平移到指定座標,然後進行度旋轉
            g.TranslateTransform(100, 200);
            for (int i = 0; i < 12; i++)
            {
                g.RotateTransform(30);
                g.DrawLine(p, 0, 0, 100, 0);
                //g.ResetTransform();
            }

在這裏,有2個方法,一個是RotatTransform,用於旋轉,一個是TranslateTransform進行平移,還有ResetTransform()方法,用於對轉換的重置,有無此方法的區別還需要各位在運行代碼的時候去進行體會。

到此,本片文章即將結束,在下篇文章中,我將實現一個仿QQ截圖的功能,並附上相應的代碼,本篇文章的代碼也將包含在內。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章