很简单的画图板,用C#实现,功能尚未完成,测试一下download

  
最近实在是太忙了,课程设计一个接一个,去年编的画图板到现在都还没改成,凑合一下吧!

操作系统:WindowsXp

开发平台:Microsoft .NET Framework1.1Microsoft Visual Studio .NET 2003

    开发语言:C#

       

一、         相关知识:

关于c#的绘图原理:

1.              重绘概念:对于MS windows的窗口而言,windows并没有存储每个已打开的窗口的外观,每当位于前台的窗口被其他窗口遮盖、移出屏幕范围、窗口本身大小改变(包括最大最小化)、用户在应用程序中人为的通知窗体重绘,windows就会告诉应用程序窗口需要重新绘制,以确定窗口的外观及内容(实际上我们只需要绘制内容,windows本身会考虑窗口的边框标题及其他要素,因为这是在设计窗体时生成的,下面会介绍C#窗体的生成)。

2.              OnPaint()函数:C#中每当窗体需要重绘,windows都会调用一个函数-OnPaint()。正是基于这一特性,我们只需要重写这个函数,达到我们希望的窗体在重绘时所要绘制的图形。

3.              C#Graphics绘图类:Graphics类封装了一个GDI+的绘图界面,提供了在windows的控件、发送给打印机的页面、内存中的位图和图像绘制图形的功能。可以绘制圆弧、矩形、椭圆。Bezier曲线、文本等图形。我们主要是从窗口控件获得Graphics对象,可以在重绘事件OnPaint()中获得:

Protected override void OnPaint(PaintEventArgs e)

{

      Graphics g = e.Graphics;

      //do our drawing here

}

有时,需要直接在窗口中绘图,无需引发OnPaint事件,可以调用CreateGraphics方法获得Graphics对象:

Protected void Form1_Click(object sender,System.EventArgs e)

{

      Graphics g = this.CreateGraphics;

      //do our drawing here

      g.Dispose();   //it is important to dispose resource

}

因为需要交互式地操作,所以在我地程序中采用第一种方法。

 

 

 

二、一些问题

1、对于图像的保存,我没有使用串行化,所以没法改,也懒得加了。我用了一个双重缓冲的办法(Image类有一个save的方法),有点怪异,可以保存位图!

2、对于旋转的的操作我设计的不好,最初没考虑旋转!

3、最近又比较忙了,源代码遗失许久,还在回忆中,尽快给大家,谢谢!

 

 源代码在这里:http://www.cnblogs.com/tcpch/archive/2007/04/17/717378.html,其实早就贴出来了,汗!

 

 

posted on 2005-02-15 11:23  tcpch  阅读(16374)  评论(49编辑  收藏  举报