龙空技术网

CSharp代码示例每日一讲:如何用GDI+技术在窗体上绘图?

程序你好 177

前言:

当前小伙伴们对“c语言绘图代码”大约比较着重,你们都需要知道一些“c语言绘图代码”的相关内容。那么小编在网上搜集了一些对于“c语言绘图代码””的相关资讯,希望姐妹们能喜欢,同学们快快来学习一下吧!

其实,使用GDI+在窗体上绘图很简单,只要override Form的OnPaint方法,在这个方法里拿到绘图对象(Graphics) 写绘制代码就可以了。

我们可以重写onPaint方法,定义如下:

Protected override void OnPaint (PaintEventArgs args){//在这里添加自己的绘图代码。}

然后我们可以通过PaintEventArgs的图形属性获取绘图对象(Graphics),然后用来绘制、线条、形状、文本和图像。下面的代码在窗体的OnPaint方法中绘制了一些图形形状和文本。要测试此代码,请创建一个Windows应用程序并向其添加代码。

protected override void OnPaint(PaintEventArgs args)

{

//从PaintEventArgs里获取绘图对象。

Graphics g = args.Graphics;

//绘制一个方框

g.DrawRectangle(

new Pen(Color.Blue, 3), new Rectangle(10, 10, 50, 50)); //填充一个 ellipse

g.FillEllipse( Brushes.Red, new Rectangle(60, 60, 100, 100));

// 使用特定的字体和绿色纯色的画刷绘制文本

g.DrawString("Text", new Font("Verdana", 14), new SolidBrush(Color.Green),

200, 200);

}

使用Visual Studio .NET添加Paint事件处理程序

如果您正在使用Visual Studio IDE进行开发,添加paint事件处理程序的最简单方法是,在窗体或控件的属性窗口添加paint事件处理程序。

最后释放绘图资源

通常,绘图对象使用了非托管的资源,实现了IDispose接口,一般来说为了避免内存泄漏在绘制完成后,需要手动释放资源。如果你的图形对象是通过CreateGraphics方法或其他“CreateFrom”方法进行创建的,需要手动调研Dispose方法去释放资源。反正,如果你使用图形对象或来自PaintEventArgs的OnPaint方法,像我们上面写的代码,系统自动去处理,不需要再手写释放资源的代码。

注意:

如果你的Graphic对象来自于Windows控件,比如窗体,按钮、列表框或DataGrid等,不需要调用Dispose方法释放资源。可如果是你的代码创建了如画笔和画刷之类的对象,一定要记得释放它们。尽管.Net垃圾回收会处理资源释放的问题,但这样做常常会严重损害应用程序的性能。垃圾收集是一件代价高昂的事情,因为垃圾收集器会检查内存中是否有未被处理的对象,而这个过程会占用处理器时间。但是,对象的Dispose方法告诉垃圾收集器该对象已完成并准备好处理。调用Dispose方法可以消除垃圾收集器检查内存的需要,从而节省处理器时间。

另外,如果是在Web页面中使用绘图对象,通常的做法是在使用对象后立即Dispose它。

OnPaintBackground方法

OnPaintBackground方法绘制控件的背景。该方法通常在派生类中被重写,以便在不附加委托的情况下处理事件。调用OnPaintBackground方法会自动调用base的OnPaintBackground,所以我们不需要显式地调用它。

绘图除了在窗体上绘制之外,经常用的方式是在PictureBox控件上绘制。跟窗体上绘制类似,可以获取控件的Graphi对象绘制。还有一种方式在图像处理里经常用,就是创建一个Image直接在Image对象上图像绘制。

标签: #c语言绘图代码 #csharp委托与事件区别