C# GDI+ Winform简单绘图(概论)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kingshown_WZ/article/details/48003967

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),外接矩形的宽为,高为

}








展开阅读全文

没有更多推荐了,返回首页