天天看點

第四部分 GDI+繪圖

1.GDI畫圖的核心是Graphics類。建立該對象有3種方法。

第一:在窗體或控件的Paint事件中建立,将其作為PaintEventArgs的一部分。

        private void Form1_Paint(object sender, PaintEventArgs e)

        {

            Graphics g = e.Graphics;

        }

第二:調用控件或窗體的CreateGraphics方法以擷取對Graphics對象的引用,該對象表示控件或窗體的繪圖畫面。如果在已存在的窗體或控件上繪圖,應該使用此方法。

        private void Form1_Load(object sender, EventArgs e)

        {

            Graphics g;

            g = this.CreateGraphics();

        }

第三:由從Image繼承的任何對象建立Graphics對象,此方法在需要更改已存在的圖像時十分有用。

        private void Form1_Load(object sender, EventArgs e)

        {

            Bitmap mbit = new Bitmap(@"C:/Is.bmp");

            Graphics g = Graphics.FromImage(mbit);

        }

2.Pen類主要用于繪制線條,Brush類用于填充幾何圖形。後者由三種,一一介紹:

第一:SolidBrush類定義單色畫筆,用于填充圖形形狀。

private void button1_Click(object sender, EventArgs e)

{

Graphics ghs = this.CreateGraphics(); //建立Graphics對象

Brush mybs = new SolidBrush(Color.Red); //使用SolidBrush類建立一個Brush對象

Rectangle rt = new Rectangle(10, 10, 100, 100); //繪制一個矩形

ghs.FillRectangle(mybs, rt); //用Brush填充Rectangle

}

第二:HatchBrush位于System.Drawing.Drawing2D命名空間下,提供了一種特定樣式的圖形,用來制作填滿整個封閉區域的繪圖效果。下面的代碼畫了5個長條圖示:

private void button1_Click(object sender, EventArgs e)

{

Graphics ghs = this.CreateGraphics(); //建立Graphics對象

for (int i = 1; i < 6; i++) //使用for循環

{

HatchStyle hs = (HatchStyle)(5 + i); //設定HatchStyle值

HatchBrush hb = new HatchBrush(hs, Color.White); //執行個體化HatchBrush類

Rectangle rtl = new Rectangle(10, 50 * i, 50 * i, 50); //根據i值繪制矩形

ghs.FillRectangle(hb, rtl); //填充矩形

}

}

第三:LinerGradientBrush提供了一種漸變色彩的特效,填滿圖形的内部區域。

private void button1_Click(object sender, EventArgs e)

{

//執行個體化兩個Point類

Point p1 = new Point(100, 100);

Point p2 = new Point(150, 150);

//執行個體化LinerGradientBrush類,設定其使用黑色和白色進行漸變

LinearGradientBrush lgb = new LinearGradientBrush(p1, p2, Color.Black, Color.White);

Graphics ghs = this.CreateGraphics(); //執行個體化Graphics類

//設定WrapMode屬性訓示該LinearGradientBrush的環繞模式

lgb.WrapMode = WrapMode.TileFlipX;

ghs.FillRectangle(lgb, 15, 15, 150, 150); //填充繪制矩形

}

3.繪制直線:

兩種畫直線的方法:

private void button1_Click(object sender, EventArgs e)

{

Pen blackPen = new Pen(Color.Black, 3);

Point point1 = new Point(10, 50);

Point point2 = new Point(100, 50);

Graphics g = this.CreateGraphics();

g.DrawLine(blackPen, point1, point2);

}

private void button2_Click(object sender, EventArgs e)

{

Graphics graphics = this.CreateGraphics();

Pen myPen = new Pen(Color.Black, 3);

graphics.DrawLine(myPen, 150, 30, 150, 100);

}

4.繪制矩形:

private void button1_Click(object sender, EventArgs e)

{

Graphics graphics = this.CreateGraphics();

Pen myPen = new Pen(Color.Black, 8);

graphics.DrawRectangle(myPen, 10, 10, 150, 100);

}

5.繪制橢圓:

private void button1_Click(object sender, EventArgs e)

{

Graphics graphics = this.CreateGraphics();

Pen myPen = new Pen(Color.Black, 3);

graphics.DrawEllipse(myPen, 100, 50, 100, 50);

}

6.繪制圓弧

private void button1_Click(object sender, EventArgs e)

{

Graphics ghs = this.CreateGraphics();

Pen myPen = new Pen(Color.Black, 3);

Rectangle myRectangle = new Rectangle(70, 20, 100, 60);

ghs.DrawArc(myPen, myRectangle, 210, 120);

}

7.繪制扇形

private void button1_Click(object sender, EventArgs e)

{

Graphics ghs = this.CreateGraphics();

Pen mypen = new Pen(Color.Black, 3);

ghs.DrawPie(mypen, 50, 50, 120, 100, 210, 120);

}

8.繪制多邊形

private void button1_Click(object sender, EventArgs e)

{

Graphics ghs = this.CreateGraphics();

Pen myPen = new Pen(Color.Black, 3);

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

ghs.DrawPolygon(myPen, myPoints);

}