很简单的画图板,用C#实现,功能尚未完成,测试一下download
最近实在是太忙了,课程设计一个接一个,去年编的画图板到现在都还没改成,凑合一下吧!
操作系统:WindowsXp
开发平台:Microsoft .NET Framework1.1+Microsoft 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、对于旋转的的操作我设计的不好,最初没考虑旋转