C# GDI+技術

來源:互聯網
上載者:User

GDI+概述

GDI+是GDI(即Windows早期版本中附帶的Graphics Device Interface)的後繼者。它是一種構成Windows XP作業系統的子系統的API(API)。 GDI+基類的主要命名空間及說明: System.Drawing--包含與基本繪圖功能相關的大多數類、結構、枚舉和委託。System.Drawing.Drawing2D--為大多數進階2D和向量繪圖操作提供了支援,包括消除鋸齒、幾何轉換和圖形路徑。System.Drawing.Imaging--協助處理映像(位元影像和GIF檔案等)的各種類。System.Drawing.Printing--把印表機或預覽列印視窗作為輸出裝置時使用的類。System.Drawing.Design--一些預定義的對話方塊、屬性工作表和其他使用者介面元素,與在設計期間擴充使用者介面相關。System.Drawing.Text--對字型和字型系列執行更進階操作的類。

基本圖形繪製

Graphics類是GDI+的核心,Graphics對象表示GDI+繪圖表面,提供了對象繪製到顯示裝置的方法。Graphics類封裝了繪製直線、曲線、圖形、映像和文本的方法,是GDI+實現繪製直線、曲線、圖形、映像和文本的類,是進行一切GDI+操作的基礎類。

繪製直線

Graphics類中的DrawLine方法,可重載,主要用來繪製一條串連由座標組指定的兩個點的線條。 (1)繪製一條串連兩個Point結構的線。

public void DrawLine(Pen pen, Point pt1,Point pt2)

pen:Pen對象,確定線條顏色、寬度和樣式。pt1:Point結構,表示要串連的第一個點。pt2:Point結構,表示要串連的第二個點。 (2)繪製一條串連由座標組指定的兩個點的線條。

Public void DrawLine(Pen pen,int x1,int y1,int x2,int y2)

繪製直線的範例程式碼:

private void button1_Click(object sender, EventArgs e){    Graphics graphics = this.CreateGraphics();    Pen myPen = new Pen(Color.Blue, 2);    graphics.DrawLine(myPen, 50, 30, 170, 30);}

繪製矩形

Graphics類的DrawRectangle方法,可重載。 (1)繪製由Rectangle結構指定的矩形。

public void DrawRectangle(Pen pen,Rectangle rect)

pen:Pen對象,確定線條顏色、寬度和樣式。rect:表示要繪製矩形的Rectangle結構。 例如:

Rectangle rect = new Rectangle(0, 0, 80, 50);

(2)繪製由座標組、寬度和高度指定的矩形。

public void DrawRectangle(Pen pen, int x, int y, int width, int height)

pen:Pen對象,確定線條顏色、寬度和樣式。x:要繪製矩形的左上方x座標。y:要繪製矩形的左上方y座標。width和height分別表示寬度和高度。 繪製矩形的範例程式碼:

private void button1_Click(object sender, EventArgs e){    Graphics graphics = this.CreateGraphics();    Pen myPen = new Pen(Color.Blue, 2);    graphics.DrawRectangle(myPen, 70, 20, 80, 50);}

繪製橢圓

Graphics類中的DrawEllipse方法,可重載。主要用來繪製邊界由Rectangle結構指定的橢圓。 (1)繪製邊界由Rectangle結構指定的橢圓。

public void DrawEllipse(Pen pen, Rectangle rect)

(2)繪製一個由邊框(該邊框由一對座標、高度和寬度指定)定義的橢圓。

public void DrawEllipse(Pen pen, int x, int y, int width, int height)

繪製橢圓的範例程式碼:

private void button1_Click(object sender, EventArgs e){    Graphics graphics = this.CreateGraphics();    Pen myPen = new Pen(Color.Blue, 3);    Rectangle myRectangle = new Rectangle(70, 20, 100, 60);    graphics.DrawEllipse(myPen, myRectangle);}

繪製圓弧

Graphics類中的DrawArc方法,可重載。 (1)繪製一段弧線,它表示由Rectangle結構指定的橢圓的一部分。

public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepAngle)

pen:Pen對象,確定線條顏色、寬度和樣式。rect:Rectangle結構,定義橢圓邊界。startAngle:從x軸到弧線的起始點沿順時針方向度量的角(以度為單位)。sweepAngle:從startAngle參數到弧線的結束點沿順時針方向度量的角(以度為單位)。 (2)繪製一段弧線,它表示由一對座標、寬度和高度指定的橢圓部分。

public void DrawArc(Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)

繪製圓弧的執行個體代碼:

private void button1_Click(object sender, EventArgs e){    Graphics graphics = this.CreateGraphics();    Pen myPen = new Pen(Color.Blue, 5);    Rectangle myRectangle = new Rectangle(70, 20, 100, 60);    graphics.DrawArc(myPen, myRectangle,210,120);}

繪製多邊形

需要Graphics對象、Pen對象和Point(或PointF)對象數組。Graphics類提供DrawPolygon方法,PenObject Storage Service用於呈現多邊形的線條屬性,如寬度和顏色等,Point(或PointF)對象數組儲存多邊形的各個頂點。可重載。 (1)繪製由一組Point結構定義的多邊形。

public void DrawPolygon(Pen pen, Point[] pints)

(2)繪製由一組PointF結構定義的多邊形。

public void DrawPolygon(Pen pen, PointF[] pints)

繪製多邊形範例程式碼:

private void button1_Click(object sender, EventArgs e){    Graphics graphics = this.CreateGraphics();    Pen myPen = new Pen(Color.Red, 5);    Point point1 = new Point(80, 20);    Point point2 = new Point(40, 50);    Point point3 = new Point(80, 80);    Point point4 = new Point(160, 80);    Point point5 = new Point(200, 50);    Point point6 = new Point(160, 20);    Point[] myPoints = { point1, point2, point3, point4, point5, point6 };    graphics.DrawPolygon(myPen, myPoints);}

繪製基數樣條

基數樣條是一連串單獨的曲線,串連起來組成較大的曲線。由點的數組和張力參數指定,樣條平滑地經過數組的每個點,曲線的陡度上沒有尖角和突然的變化。 (1)繪製經過一組指定Point結構的基數樣條。

public void DrawCurve(Pen pen, Point[] points)

(2)使用指定的張力,繪製經過一組指定Point結構的基數樣條。

public void DrawCurve(Pen pen, Point[] points, float tension)

tension:大於或等於0.0F的值,指定曲線的張力。 (3)從相對於數組開始位置的位移量開始,繪製經過一組指定PointF結構的基數樣條。

public void DrawCurve(Pen pen, Point[] points, int offset, int numberOfSegments)

offset:從points參數數組中的第一個元素到曲線中起始點的位移量。numberOfSegments:起始點之後要包含在曲線中的段數。 (4)使用指定張力,繪製經過一組指定Point結構的基數樣條。

public void DrawCurve(Pen pen, Point[] points, int offset, int numberOfSegments, float tension)

繪製基數樣條範例程式碼:

private void button1_Click(object sender, EventArgs e){    Graphics graphics = this.CreateGraphics();    Pen myPen = new Pen(Color.Red, 5);    Point point1 = new Point(50, 20);    Point point2 = new Point(60, 30);    Point point3 = new Point(70, 25);    Point point4 = new Point(100, 50);    Point point5 = new Point(130, 30);    Point point6 = new Point(150, 45);    Point[] myPoints = { point1, point2, point3, point4, point5, point6 };    graphics.DrawCurve(myPen, myPoints, 1.0F);}

繪製貝賽爾樣條

貝塞爾樣條是由4個點指定的曲線:兩個端點(p1,p2)和兩個控制點(c1,c2)。曲線開始於p1,結束於p2。曲線不經過控制點,但是控制點像磁鐵一樣,在某些方向上展開曲線並影響曲線彎曲的方式。 調用Graphics類的DrawBezier方法,可重載。 (1)繪製由4個Point結構定義的貝塞爾樣條。

public void DrawBezier(Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)

4個Point點分別表示起始點、第一個控制點、第二個控制點和結束點。
(2)繪製由4個表示點的有序座標組定義的貝塞爾樣條。

public void DrawBezier(Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)

x2,y2及x3,y3分別表示第1個、第2個控制點相應座標。順序和第一種方法類似。
繪製貝塞爾樣條範例程式碼:

private void button1_Click(object sender, EventArgs e){    Graphics graphics = this.CreateGraphics();    Pen myPen = new Pen(Color.Red, 5);    float startX = 50.0F;    float startY = 80.0F;    float controlX1 = 150.0F;    float controlY1 = 20.0F;    float controlX2 = 230.0F;    float controlY2 = 50.0F;    float endX = 190.0F;    float endY = 80.0F;    graphics.DrawBezier(myPen, startX, startY, controlX1, controlY1, controlX2, controlY2, endX, endY);}

繪製圖形路徑

路徑是通過組合直線、矩形和簡單的曲線而形成的。在GDI+中,GraphicsPath對象允許將基本構造塊收集到一個單元中,調用一次Graphics類的DrawPath方法,就可以繪製出整個單元的直線、矩形、多邊形和曲線。

public void DrawPath(Pen pen, GraphicsPath path)

pen:Pen對象,確定線條顏色、寬度和樣式。path:要繪製的GraphicsPath圖形路徑。 PS:注意要引用System.Drawing.Drawing2D命名空間。
繪製圖形路徑範例程式碼:

private void button1_Click(object sender, EventArgs e){    Graphics graphics = this.CreateGraphics();    GraphicsPath myGraphicsPath = new GraphicsPath();    Pen myPen = new Pen(Color.Blue, 1);    Point[] myPoints = { new Point(15, 30), new Point(30, 40), new Point(50, 30) };    myGraphicsPath.AddArc(15, 20, 80, 50, 210, 120);    myGraphicsPath.StartFigure();    myGraphicsPath.AddCurve(myPoints);    myGraphicsPath.AddString("圖形路徑", new FontFamily("華文行楷"), (int)FontStyle.Underline, 50, new PointF(20, 50), new StringFormat());    myGraphicsPath.AddPie(180,20,80,50,210,120);    graphics.DrawPath(myPen, myGraphicsPath);}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.