目錄
1 命名空間與繼承
2 Color、Pen、Brush
2.1 Color
2.2 Pen
2.3 Brush
3 示例
3.1 畫線
3.2 畫矩形
3.3 畫圓
3.4 畫弧/扇形
3.5 畫多邊形
4 參考
1 命名空間與繼承
Graphics類是GDI+技術的一個基本類。GDI+(GDI+是GDI[Graphics Device Interface]的改進)是.NET架構的重要組成部分,提供對二維圖形圖像和文字排版處理的支援。
命名空間:System.Drawing
繼承:Object→MarshalByRefObject→Graphics
2 Color、Pen、Brush
2.1 Color
Color Struct表示一種ARGB顔色(alpha、紅、綠、藍)。Color結構通過表态屬性公開了140個命名顔色。
常用屬性及方法
(1)通過屬性傳回預先建立的Color對象
Color cl = Color.Red;
(2)建立Color執行個體的參數為 a,r,g,b;
Color cl = Color.FromArgb(100,200,200,200); //第1個參數為透明度(alpha)參數,其後為紅,綠和藍.
(3)建立Color執行個體的參數為 r,g,b; //參數為紅,綠,藍三種原色,透明度為預設,即完全不透明.
Color cl = Color.FromArgb(200,200,200);
(4)從一個現在的Color對象建立一個新的Color執行個體,隻修改透明度成份
Color cl = Color.FromArgb(100,Color.PowderBlue);
(5)用一個形式為AARRGGBB的組合整數建立一個Color執行個體
Color cl = Color.FromArgb(0x64C8C8FF);
(6)調用靜态FromKnownColor方法來建立Color對象
Color cl = Color.FromKnownColor(KnownColor.PowderBlue); //KnownColor枚舉值作為參數.
(7)調用靜态FromName方法
Color cl = Color.FromName("PowderBlue"); //字元串參數必須包含一個KnownColor枚舉值的名稱.
其他屬性
(1)IsNamedColor Boolean值,如果顔色值在這140個命名顔色中時,值為true,否則為false.
(2)IsKnownColor Boolean值,如果顔色值是KnownColors枚舉的顔色之一時,值為true.
(3)IsSystemColor Boolean值,如果顔色值是SystemColors類的屬性值之一時,值為true.
顔色對照表
點選連結檢視顔色對照表:連結
2.2 Pen
畫筆,定義用于繪制直線和曲線的對象。
構造函數
(1)Pen pen1 = new Pen(Color); //參數為顔色Color 寬度預設為1;
Pen pen2 = new Pen(Color, Single); //參數為顔色Color,單精度浮點數Sigle;
(2) Pen pen3 = Pen(Brush); // 使用指定的 Pen 初始化 Brush 類的新執行個體。
Pen pen4 = Pen(Brush, Single); // 使用指定的 Pen 和 Brush 初始化 Width 類的新執行個體。
屬性
Alignment | 擷取或設定此 Pen 的對齊方式。 |
Brush | 擷取或設定 Brush,用于确定此 Pen 的特性。 |
Color | 擷取或設定此 Pen 的顔色。 |
CompoundArray | 擷取或設定用于指定複合鋼筆的值數組。 複合鋼筆繪制由平行直線和空白區域組成的複合直線。 |
CustomEndCap | 擷取或設定要在通過此 Pen 繪制的直線終點使用的自定義線帽。 |
CustomStartCap | 擷取或設定要在通過此 Pen 繪制的直線起點使用的自定義線帽。 |
DashCap | 擷取或設定用在短劃線終點的線帽樣式,這些短劃線構成通過此 Pen 繪制的虛線。 |
DashOffset | 擷取或設定直線的起點到短劃線圖案起始處的距離。 |
DashPattern | 擷取或設定自定義的短劃線和空白區域的數組。 |
DashSt5.1yle | 擷取或設定用于通過此 Pen 繪制的虛線的樣式。 |
EndCap | 擷取或設定要在通過此 Pen 繪制的直線終點使用的線帽樣式。 |
LineJoin | 擷取或設定通過此 Pen 繪制的兩條連續直線的端點的聯接樣式。 |
MiterLimit | 擷取或設定斜接角上聯接寬度的限制。 |
PenType | 擷取用此 Pen 繪制的直線的樣式。 |
StartCap | 擷取或設定在通過此 Pen 繪制的直線起點使用的線帽樣式。 |
Transform | 擷取或設定此 Pen 的幾何轉換的副本。 |
2.3 Brush
畫刷:定義用于填充圖形形狀(如矩形、橢圓、餅形、多邊形和封閉路徑)的内部的對象。
參考代碼:
private void Form1_Paint(object sender, PaintEventArgs e)
{
// (實心刷)
Rectangle myrect1 = new Rectangle(20, 80, 250, 100);
SolidBrush mysbrush1 = new SolidBrush(Color.DarkOrchid);
SolidBrush mysbrush2 = new SolidBrush(Color.Aquamarine);
SolidBrush mysbrush3 = new SolidBrush(Color.DarkOrange);
//(梯度刷)
LinearGradientBrush mylbrush5 = new LinearGradientBrush(rect1,
Color.DarkOrange, Color.Aquamarine,
LinearGradientMode.BackwardDiagonal);
//(陰影刷)
HatchBrush myhbrush5 = new HatchBrush(HatchStyle.DiagonalCross,
Color.DarkOrange, Color.Aquamarine);
HatchBrush myhbrush2 = new HatchBrush(HatchStyle.DarkVertical,
Color.DarkOrange, Color.Aquamarine);
HatchBrush myhbrush3 = new HatchBrush(HatchStyle.LargeConfetti,
Color.DarkOrange, Color.Aquamarine);
//(紋理刷)
TextureBrush textureBrush = new TextureBrush(new Bitmap(@"e:/123.jpg"));
e.Graphics.FillRectangle(mysbrush1, rect1); // (實心刷)
e.Graphics.FillRectangle(mylbrush1, rect1); //(梯度刷)
e.Graphics.FillRectangle(myhbrush1, rect1); //(陰影刷)
e.Graphics.FillRectangle(mytextureBrush, rect1); //(紋理刷)
}
結果如下:

幾種畫刷對比
3 示例
3.1 畫線
畫實線和虛線的代碼如下:
private void button1_Click(object sender, EventArgs e)
{
//畫實線
Pen pen = new Pen(Color.Red, 3);
//确定線的首位位置
Point point1 = new Point(10, 50);
Point point2 = new Point(250, 50);
Graphics g = this.CreateGraphics();
g.DrawLine(pen, point1, point2);
}
private void button2_Click(object sender, EventArgs e)
{
//畫虛線
Pen pen = new Pen(Color.Red, 3);
//自定義虛線樣式
pen.DashStyle = DashStyle.Custom;
pen.DashPattern = new float[] { 2, 2 };
//确定線的首位位置
Point point1 = new Point(10, 80);
Point point2 = new Point(250, 80);
Graphics g = this.CreateGraphics();
g.DrawLine(pen, point1, point2);
}
效果如下:
畫線
3.2 畫矩形
填充矩形:g.FillRectangle(brush, rect);
不填充矩形:g.DrawRectangle(pen, rect);
代碼如下:
private void button1_Click(object sender, EventArgs e)
{
//畫矩形
Pen pen = new Pen(Color.YellowGreen);
SolidBrush brush = new SolidBrush(Color.YellowGreen);
Graphics g = this.CreateGraphics();
//定義一個矩形
Rectangle rect = new Rectangle(20, 20, 220, 200);
g.FillRectangle(brush, rect);
//g.DrawRectangle(pen, rect);
}
畫矩形
3.3 畫圓
①填充圓:g.FillEllipse(brush, rect);
②不填充圓:g.DrawEllipse(pen, rect);
代碼如下:
private void button1_Click(object sender, EventArgs e)
{
//畫圓
Pen pen = new Pen(Color.Red);
SolidBrush brush = new SolidBrush(Color.YellowGreen);
Graphics g = this.CreateGraphics();
Rectangle rect = new Rectangle(20, 20, 200, 200);
g.FillEllipse(brush, rect);
g.DrawEllipse(pen, rect);
}
效果如下:
畫圓
3.4 畫弧/扇形
①畫弧:g.DrawArc(pen, rect, -90,90); //四個參數分别為:Pen,矩形區域rect,起始角度(0為水準向右,順時針為正),掃過角度。
②畫填充扇形:g.FillPie(brush, rect, -45, 90); //四個參數分别為:Brush,矩形區域rect,起始角度(0為水準向右,順時針為正),掃過角度。
③畫不填充扇形g.DrawPie(pen,rect,-45,90); //四個參數分别為:Pen,矩形區域rect,起始角度(0為水準向右,順時針為正),掃過角度。
代碼如下:
private void button2_Click(object sender, EventArgs e)
{
//畫虛線
Pen pen = new Pen(Color.Red, 3);
SolidBrush brush = new SolidBrush(Color.YellowGreen);
Rectangle rect = new Rectangle(20, 20, 200, 200);
Graphics g = this.CreateGraphics();
//畫弧線
//g.DrawArc(pen, rect, -90,90);
//畫扇形
g.DrawPie(pen, rect, -45, 90);
g.FillPie(brush, rect, -45, 90);
}
畫扇形
3.5 畫多邊形
① 畫填充多邊形:g.DrawPolygon(pen, pis); //參數分别是:pen,Point數組;
② 畫不填充多邊形:g.FillPolygon(brush, pis); //參數分别是:brush,Point數組;
代碼入下:
private void button2_Click(object sender, EventArgs e)
{
//畫多邊形
Pen pen = new Pen(Color.Red, 3);
SolidBrush brush = new SolidBrush(Color.YellowGreen);
Rectangle rect = new Rectangle(20, 20, 200, 200);
Graphics g = this.CreateGraphics();
//point數組
Point[] pis = new Point[] { new Point(10, 10), new Point(100, 20), new Point(130, 50), new Point(100, 200), new Point(70, 200), new Point(10, 20) };
g.DrawPolygon(pen, pis);
g.FillPolygon(brush, pis);
}
畫多邊形
4 參考
Color 參考:C#Color對象的使用介紹及顔色對照表
Brush參考:c# Brush的使用方法