很簡單的畫圖板,用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、對於旋轉的的操作我設計的不好,最初沒考慮旋轉