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