在背景(記憶體內)繪圖的概念
為了可以正確將圖形以檔案方式處理,以及繪圖速度的考量,多數電腦程式繪圖多採用背景繪圖的方式。簡單說就是繪圖動作都畫在一張記憶體內的影像中,畫完再貼到表單物件中,看起來挺麻煩,但是執行效率比以往的VB直接在表單物件上繪圖速度快上至少三倍!說實話目前.NET繪圖方式完全承襲自C++語言,比之前的VB麻煩很多,很多VB2005的書甚至有意的忽略不寫這一部份,但是繪圖永遠是視窗程式極重要的部份,不能不教的。下面是我們的VB小畫家,和VC單元不同,我們從檔案處理的部份開始。
一、表單佈置:功能表檔案部份設計如下圖,在表單裡面放一個 PictureBox,並填滿表單。


二、變數宣告:如下圖必須先宣告多個在程式中會共同使用的變數。


三、開啟新檔(空白圖)
如上所示,開啟新檔案的動作包括:
1. 清除PictureBox的影像(Image=Nothing)
2. 建立記憶體畫布(bmp),使他大小與表單上的PictureBox一樣大。
3. 建立繪圖物件(g)對應於記憶體畫布(bmp)
4. 呼叫繪圖物件將畫布清除為白色的背景,預設背景是透明的,如果直接貼上會變黑色,看起來比較奇怪。
5. 將記憶體畫布貼(複製)到 PictureBoxImage屬性中。
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)。