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物件
}