1. 程式人生 > >C#繪圖基礎

C#繪圖基礎

一、畫筆

  • 建立畫筆

Pen pen = new Pen(Color.Red);        /*引數為畫筆顏色*/

  • 畫筆寬度

pen.Width = 0.5f;     /*設定畫筆寬度*/

  • 畫筆型別

pen.DashStyle = DashStyle.DashDotDot;        /*點畫線*/

注:使用時要使用名字空間 using System.Drawing.Drawing2D.

  • 畫筆顏色

pen.Color = Color.Red;

二、畫刷

  • 建立畫刷

Brush brush = new SolidBrush(Color.Red);      /*畫刷型別為Solid*/

  • 標準顏色畫刷類

Brushes類集合了所有標準顏色的畫刷,其每個成員物件均為Brush型別.使用示例如下:

grp.FillEllipse(Brushes.Aqua,rectf);

  • 建立漸變畫刷

LinearGradientBrush類為漸變畫刷類,使用示例如下:

Brush brush = null;

brush = new LinearGradientBrush(this.panLeft.ClientRectangle,

                        Color.Blue,Color.Yellow,angle);

引數說明:

panLeft為畫布Name,angle為float型別變數,表示漸變角度.

  • 建立紋理畫刷

TextureBrush類為紋理畫刷類,使用示例如下:

Brush brush = null;

         brush = new TextureBrush(brushImage);

引數說明:

brushimage為Image型別變數.

三、畫布

  • 建立畫布控制元件物件

Graphics grp = panShow.CreateGraphics();    /* panShow 為對應的panel控制元件的名字*/

  • 清除畫布內容

grp.Clear(panShow.BackColor);       /*引數為填充畫布的顏色*/

  • 繪製直線

使用函式DrawLine繪製直線,示例如下:

grp.DrawLine(pen, startPoint, endPoint);       /*grp為Graphics 型別變數*/

引數說明:

         第一個引數為畫筆,第二個引數為直線起點,第三個引數為直線終點.

  • 繪製多條直線

使用函式DrawLines繪製多條直線,示例如下:

List<PointF> points = new List<PointF>();        /*點列表*/

for (int index = 0; index < 10; index++)

{

float x = index * index / 2f;

float y = 2 * x * x + 3 * x + 5;

PointF point = new PointF(x,y);

points.Add(point);   /*將點加入點列表中*/

}

Graphics grp = panDraw.CreateGraphics();    /*panDraw為畫布名字*/

grp.DrawLines(pen,points.ToArray());

引數說明:

第一個引數為畫筆,第二個引數為陣列(PointF[]).

  • 繪製橢圓(包括圓)

grp.DrawEllipse(Pens.Blue,largeRect);  /*第一個引數為畫筆,第二個引數為外接矩形*/

  • 填充橢圓

grp.FillEllipse(brush,rect);        /*第二個引數為橢圓的外接矩形*/

  • 獲取畫布的寬與高

float width = this.panDraw.Width;  /* panDraw 為控制元件名字*/

float height = this.panDraw.Height;        /* panDraw 為控制元件名字*/

  • 設定影象質量(光滑度)

         可以使用SmoothingMode來設定所繪製圖像的質量,使用示例如下:

         grp.SmoothingMode = SmoothingMode.HighQuality;    /*設定為高度平滑*/

注:使用時候包含using System.Drawing.Drawing2D;

  • 繪製字串

         使用函式DrawString進行字串的繪製,使用示例如下:

grp.DrawString(“C#程式”,font,Brushes.Black,point);

引數說明:

第一個引數為要繪製的字串;第二個引數為建立的畫筆,第三個引數為畫刷,最後一個引數為顯示字串的位置.

  • 圖形雙緩衝區

為了避免直接在畫布上繪圖出現的閃爍現象,可以使用圖形雙緩衝區。其原理就是先在緩衝區將圖形繪製完成,再將其顯示出來。使用方式如下:

①定義一個圖形雙緩衝區物件:

private BufferedGraphics bgrp = null;     /*在該窗體對應的類中定義一個成員變數*/

②在窗體載入函式中做如下操作:

Graphics grp = this.CreateGraphics();

this.bgrp = BufferedGraphicsManager.Current.Allocate(grp,this.ClientRectangle);

說明:BufferedGraphicsManager.Current.Allocate函式作用是建立指定大小的緩衝區,第一個引數為目標畫布(或者畫板).

注:如果窗體大小可變時候,在窗體大小改變響應函式中也要加上上面的語句.

③使用this.bgrp.Graphics物件進行一切相關的繪圖操作:

下面給出一些示例:

this.bgrp.Graphics.Clear(this.BackColor);      /*清空畫布*/

this.bgrp.Graphics.FillEllipse(Brushes.Aqua,rectf);                  /*填充橢圓*/

this.bgrp.Graphics.DrawLine(pen,startPoint,endPoint);                  /*繪製直線*/

進行其它繪圖操作都是使用this.bgrp.Graphics物件.

④繪圖完成後,要在畫布上顯示圖片:

this.bgrp.Render();          /*繪圖完成後要顯示繪製圖形*/

四、常用圖形

  • Rectangle:矩形
  • Point:點

建立示例:

RectangleF rect = new RectangleF();

         private PointF centerPoint = PointF.Empty;     /*定義一個空的物件*/

五、顏色

  • ARGB顏色類(Color)

(a)Color類封裝了系統定義的ARGB顏色,使用示例如下:

Pen pen = new Pen(Color.White);

pen.Color = Color.Red;

(b)可以通過成員函式FromArgb生成一個Color型別物件,使用示例如下:

Color color = Color.FromArgb(120,120,0);

六、影象

  • Image類

①載入圖片:

Image brushImage = null;        /*定義變數*/

brushImage = Image.FromFile(Application.StartupPath+"\\Image\\brush.jpg");/*載入圖片*/

注:Application.StartupPath為當前應用程式執行目錄,Image為新建的目錄,btush.jpg為圖片名字.

 

  • 字型

Font myFont=new Font("宋體", 40);

FontConverter fc = new FontConverter();

string fontInfo = fc.ConvertToInvariantString(myFont);//將Font轉化成字串

 

if (!(fontInfo==null || fontInfo.Equals(string.Empty)))

{

myFont = (Font)fc.ConvertFromString(fontInfo);//將字串轉化成Font物件

}