
|
在背景(記憶體內)繪圖的概念 為了可以正確將圖形以檔案方式處理,以及繪圖速度的考量,多數電腦程式繪圖多採用背景繪圖的方式。簡單說就是繪圖動作都畫在一張記憶體內的影像中,畫完再貼到表單物件中,看起來挺麻煩,但是執行效率比以往的VB直接在表單物件上繪圖速度快上至少三倍!說實話目前.NET繪圖方式完全承襲自C++語言,比之前的VB麻煩很多,很多VB2005的書甚至有意的忽略不寫這一部份,但是繪圖永遠是視窗程式極重要的部份,不能不教的。下面是我們的VB小畫家,和VC單元不同,我們從檔案處理的部份開始。 |
一、表單佈置:功能表檔案部份設計如下圖,在表單裡面放一個 PictureBox,並填滿表單。![]() 二、變數宣告:如下圖必須先宣告多個在程式中會共同使用的變數。 ![]() 三、開啟新檔(空白圖) 如上所示,開啟新檔案的動作包括: 1. 清除PictureBox的影像(Image=Nothing) 2. 建立記憶體畫布(bmp),使他大小與表單上的PictureBox一樣大。 3. 建立繪圖物件(g)對應於記憶體畫布(bmp) 4. 呼叫繪圖物件將畫布清除為白色的背景,預設背景是透明的,如果直接貼上會變黑色,看起來比較奇怪。 5. 將記憶體畫布貼(複製)到 PictureBox的 Image屬性中。 6. 在副程式標題的最後,我們將 Me.Load事件加入,意思是表單開啟(程式開始)時也會自動開新檔案。 |
|
四、開啟舊檔 請先加入一個 OpenFileDialog 對話盒,在開啟舊檔功能下寫程式: ![]() 1. 請注意OpenFileDialog的用法,如果是Cancel就直接跳出副程式(Exit Sub),只有VB可以這麼寫。 2. 接著是將檔案放到記憶體畫布(bmp)中,再貼到表單的影像盒中 |
|
五、儲存檔案 ![]() 請注意到將SaveFileDialog1的Filter屬性改成*.BMP|*.bmp,在儲存時也必須指定儲存的格式(System.Drawing.Imaging.ImageFormat...) |
|
六、塗鴉 ![]() 與C#寫法相似,注意到筆的定義方式刻意以變數取代參數,目的是後面可以用程式改變筆的性質。 |
|
七、關閉檔案及結束程式 ![]() 關閉檔案就是將影像屬性都設為Nothing(沒東西) |
|
八、設定筆的顏色:設置一個顏色對話盒,設定功能表『顏色』項目寫程式如下: ![]() |
|
九、設定筆的粗細:設置一個ComboBox下拉式選單,預設為隱形;建立功能表項目寫程式如下: ![]() |
|
十、跳出式選單(功能表):ContextMenuStrip 到工具箱功能表與工具列分類中選擇ContextMenuStrip,會出現類似主功能表的選單,製作一個『紅色』選項如下: ![]() 點選PictureBox,ContextMenuStrip會暫時消失,如需再編輯可以點表單下面的ContextMenuStrip圖示。設定PictureBox的ContextMenuStrip屬性指向這個功能表,這表示之後再PictureBox按右鍵會跳出這個功能表選單。 十一、訊息框 在『紅色』功能中寫程式如下: ![]() 第一行是宣告一個顏色(Color)變數,這個顏色將取自影像的(mdx,mdy)座標位置。在標準的數位影像中,一個全彩顏色包含: 紅(Red)、藍(Blue)、綠(Green)三部份,每個成分顏色以0~255的數字表示其強度,全部都是0為黑色,全部255表示白色。 第二行程式會產生一個訊息框,裡面寫出選擇點的紅色亮度,取出顏色資料的紅色部分程式如:C.R,藍色是C.B,綠色是C.G。 請模仿以上程式製作顯示『綠色』與『藍色』的功能。 |
|
十二、工具提示:ToolTip 請到工具箱通用控制項中選一個ToolTip,並修改PictureBox的MouseMove程式如下: ![]() 意思是如果不是繪圖(左鍵按下)的狀況,會產生工具提示指出滑鼠的座標(e.X, e.Y)。 |