前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSharp代码示例每日一讲: 如何用GDI+技术在窗体上绘图?

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

作者头像
程序你好
发布2018-07-20 15:50:51
1.2K0
发布2018-07-20 15:50:51
举报
文章被收录于专栏:程序你好

其实,使用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对象上图像绘制。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Visual Studio .NET添加Paint事件处理程序
  • 最后释放绘图资源
  • 注意:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档