GDI+:Graphics Device Interface Plus也就是图形设备接口,提供了各种丰富的图形图像处理功能。在C#.NET中,使用GDI+处理二维(2D)的图形和图像,使用DirectX处理三维(3D)的图形图像,图形图像处理用到的主要命名空间是System . Drawing:提供了对GDI+基本图形功能的访问,主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等.
大概了解了什么是GDI+后,我们来看一下绘图要用到的主要工具,。要画图,肯定要画板,在C#中画板可以通过Graphics这个类来创建。有了画板,总得弄个笔什么之类的吧,不然怎么画,笔又可以分好多种类,比如铅笔,画刷等。它们的区别主要是铅笔可以用来画线条,而画刷呢,嘿嘿,自己考虑下。在c#中我们可以用Pen,Brush类来实现类似功能.颜料则自然是用Color类了.
有了工具,我们就可以开始动手了!(所需命名空间:using System.Drawing;)
/********************/
首先,准备一个画板。
方法一:在窗体或控件的Paint事件中直接引用Graphics对象(利用窗体或控件中Paint事件的 PaintEventArgs)
在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。
例如:
//窗体的Paint事件的响应方法
private void form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; //创建画板,这里画板由Form提供的
Rectangle r = new Rectangle(10, 10, 300, 200);//是创建画矩形的区域
g.DrawRectangle(Pens.Red, r);//g对象提供了画图形的方法,我们只需调用即可
}
//也可以直接重载控件或窗体的OnPaint方法,具体代码如下所示:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
Rectangle r = new Rectangle(10, 10, 300, 200);//是创建画矩形的区域
g.DrawRectangle(Pens.Red, r);//g对象提供了画图形的方法,我们只需调用即可
}
注:在窗体或控件重绘的时,会调用OnPaint方法,在OnPaint方法内,会激发Paint事件。所以你只要给Paint事件一个处理函数,它就会在窗体重绘的时候激发Paint事件,并调用事件的处理方法, 或者,你重写基类的OnPaint方法,也可以达到相同的功效。窗体重绘发生在窗体最小化,最大化,被遮挡又重新显示出来,等等情况,即:需要重新绘制界面的时候触发窗体重绘事件。
方法二:调用某控件或窗体的CreateGraphics方法
调用某控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示该控件或窗体的绘图图面。如果想在已存在的窗体或控件上绘图,通常会使用此方法。
例如:
Graphics g = this.CreateGraphics();
//窗体的Paint事件的响应方法(也可以这么用)
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = this.CreateGraphics();//获取到graphics对象
Rectangle rect = new Rectangle(10, 10, 35, 35);//定义矩形,参数为起点横纵坐标以及其长和宽
g.DrawRectangle(Pens.Red, rect);
}
方法三:调用Graphics类的FromImage静态方法
由从Image继承的任何对象创建Graphics对象。在需要更改已存在的图像时,通常会使用此方法。
例如:
//在PictureBox控件上插入图片
private void Form1_Load(object sender, EventArgs e)
{
Image img = Image.FromFile("e:/g1.jpg");//建立Image对象
Graphics g = Graphics.FromImage(img);//创建Graphics对象
pictureBox1.Image = img;
}
//在PictureBox控件上画图
private void Form1_Load(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);
Graphics g = Graphics.FromImage(bitmap);
pictureBox1.Image = bitmap;
Rectangle r = new Rectangle(10, 10, 300, 200);//是创建画矩形的区域
g.DrawRectangle(Pens.Red, r);//g对象提供了画图形的方法,我们只需调用即可
}
然后,只要笔。
Pen p = new Pen(Color.Red, 2);//定义了一个蓝色,宽度为的画笔
接下来,画画。
private void form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; //创建画板,这里的画板是由Form提供的.
Pen p = new Pen(Color.Red, 2);//定义了一个蓝色,宽度为的画笔
g.DrawLine(p, 10, 10, 100, 100);//在画板上画直线,起始坐标为(10,10),终点坐标为(100,100)
g.DrawRectangle(p, 10, 10, 100, 100);//在画板上画矩形,起始坐标为(10,10),宽为,高为
g.DrawEllipse(p, 10, 10, 100, 100);//在画板上画椭圆,起始坐标为(10,10),外接矩形的宽为,高为
}
网友评论