首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# GDI+ 進階繪圖技巧:畫筆、畫刷與座標轉換

     編輯:關於C#

前言

承接上一篇《C# GDI+ 簡單繪圖(一)》,本文將深入探討 GDI+ 中更實用的繪圖技巧,包括 Pen 進階屬性應用、多種 Brush 填充模式、座標系統轉換以及 Graphics.DrawImage 影像繪製。

一、Pen 進階應用:虛線、箭頭與自訂樣式

Pen 類別不僅能畫實線,透過屬性設定還能實現豐富的線條效果:

  • Color:線條顏色
  • Width:線條粗細
  • DashStyle:虛線樣式(實線、虛線、點線、點畫線等)
  • DashPattern:自訂虛線模式(浮點數陣列,交替指定線段與間隙長度)
  • StartCap / EndCap / DashCap:線頭、線尾、虛線段端點形狀(圓形、方形、箭頭、菱形等)

程式碼範例:繪製虛線、自訂虛線與箭頭線

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);
}

Pen 進階繪圖效果

二、Brush 填充模式大全

畫刷用於填充封閉圖形(矩形、橢圓、扇形、多邊形、路徑)。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);
    }
}

Brush 填充效果展示

三、座標系統轉換:旋轉與平移

WinForms 座標系統原點在左上角,X 向右增、Y 向下增,與數學慣用座標系相反。Graphics 提供座標轉換方法,讓繪圖更靈活:

  • RotateTransform(angle):以原點為中心旋轉座標軸
  • TranslateTransform(dx, dy):平移座標原點
  • ResetTransform():重設為預設座標系

WinForms 座標系統示意圖

程式碼範例:旋轉繪製放射狀線條、平移與組合轉換

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:影像繪製

除了基本圖形,Graphics 還能繪製影像(DrawImage 方法),支援縮放、裁切、旋轉、透明度調整等。這是實作截圖、圖片編輯器的核心。詳細用法請參考 MSDN 文件,後續文章將實作截圖功能演示。

總結

掌握 Pen 樣式控制、Brush 多樣填充、座標轉換技巧,能大幅提升 GDI+ 繪圖的表現力。下一篇將整合這些知識實作一個簡易繪圖板。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved