承接上一篇《C# GDI+ 簡單繪圖(一)》,本文將深入探討 GDI+ 中更實用的繪圖技巧,包括 Pen 進階屬性應用、多種 Brush 填充模式、座標系統轉換以及 Graphics.DrawImage 影像繪製。
Pen 類別不僅能畫實線,透過屬性設定還能實現豐富的線條效果:
using (Pen p = new Pen(Color.Blue, 5))
using (Graphics g = this.CreateGraphics())
{
// 1. 繪製點線
p.DashStyle = DashStyle.Dot;
g.DrawLine(p, 10, 10, 200, 10);
// 2. 自訂虛線:線段 2px、間隙 1px
p.DashPattern = new float[] { 2, 1 };
g.DrawLine(p, 10, 20, 200, 20);
// 3. 繪製帶箭頭的實線(僅對開放曲線有效)
p.DashStyle = DashStyle.Solid;
p.EndCap = LineCap.ArrowAnchor;
g.DrawLine(p, 10, 30, 200, 30);
}

畫刷用於填充封閉圖形(矩形、橢圓、扇形、多邊形、路徑)。GDI+ 提供五種主要畫刷:
| 畫刷類型 | 說明 |
|---|---|
SolidBrush | 純色填充,最基本的畫刷 |
HatchBrush | 預設斜紋圖案填充(水平線、垂直線、十字紋等) |
TextureBrush | 使用圖片(紋理)進行平鋪填充 |
LinearGradientBrush | 線性漸層填充,兩顏色沿指定方向過渡 |
PathGradientBrush | 基於自訂路徑的複雜漸層填充 |
using (Graphics g = this.CreateGraphics())
{
Rectangle rect = new Rectangle(10, 10, 50, 50);
// 1. 純色填充矩形與文字
using (SolidBrush blueBrush = new SolidBrush(Color.Blue))
{
g.FillRectangle(blueBrush, rect);
g.DrawString("字串", new Font("新細明體", 10), blueBrush, new PointF(90, 10));
}
// 2. 圖片紋理填充
using (TextureBrush texBrush = new TextureBrush(Image.FromFile(@"e:\picture\1.jpg")))
{
rect.Location = new Point(10, 70);
rect.Size = new Size(200, 200);
g.FillRectangle(texBrush, rect);
}
// 3. 線性漸層填充(水平方向:黃→黑)
rect.Location = new Point(10, 290);
using (LinearGradientBrush gradBrush = new LinearGradientBrush(
rect, Color.Yellow, Color.Black, LinearGradientMode.Horizontal))
{
g.FillRectangle(gradBrush, rect);
}
}

WinForms 座標系統原點在左上角,X 向右增、Y 向下增,與數學慣用座標系相反。Graphics 提供座標轉換方法,讓繪圖更靈活:
RotateTransform(angle):以原點為中心旋轉座標軸TranslateTransform(dx, dy):平移座標原點ResetTransform():重設為預設座標系
using (Graphics g = this.CreateGraphics())
using (Pen p = new Pen(Color.Blue, 1))
{
// 1. 旋轉座標軸畫放射線(每一度畫一條)
for (int i = 0; i < 90; i++)
{
g.RotateTransform(i);
g.DrawLine(p, 0, 0, 100, 0);
g.ResetTransform();
}
// 2. 平移原點到 (100,100) 再畫線
g.TranslateTransform(100, 100);
g.DrawLine(p, 0, 0, 100, 0);
g.ResetTransform();
// 3. 先平移再連續旋轉(畫 8 條線,每次旋轉 45 度)
g.TranslateTransform(100, 200);
for (int i = 0; i < 8; i++)
{
g.RotateTransform(45);
g.DrawLine(p, 0, 0, 100, 0);
}
}

除了基本圖形,Graphics 還能繪製影像(DrawImage 方法),支援縮放、裁切、旋轉、透明度調整等。這是實作截圖、圖片編輯器的核心。詳細用法請參考 MSDN 文件,後續文章將實作截圖功能演示。
掌握 Pen 樣式控制、Brush 多樣填充、座標轉換技巧,能大幅提升 GDI+ 繪圖的表現力。下一篇將整合這些知識實作一個簡易繪圖板。