close

在 .Net 環境下,GDI+ 是新的繪圖工具

繪圖模式主要有三種
1. 在物件上繪圖
2. 在bitmap 上繪圖在放入視窗物件
3. 存在Graphicpath後在繪製到Bitmap 放到視窗物件


在使用的方便上就如上面  依序 (字越多越不方便)

但在效能上  剛好反過來


第一種直接在物件上繪圖,是直接顯示給使用者,最簡單使用,但顯示效果最差(容易閃爍)
在Form 表單上的物件,如 buttom  picturebox,可直接在 plant  事件中執行
e.Graphic.drawLine(pen1,p1,p2)

第二種在Bitmap上繪圖,速度比較快,因為是先在 記憶體中處理好後才顯示出來

Dim bm as bitmap(500,600)
Dim g as Graphic  = Graphic.FromImage(bm)

g.drawLine(pen1,p1,p2)
picturebox1.backgroundimage = bm


第二種的優點是   可以對 畫布(Bitmap) 做一些處理,比如 灰階、二值化、放大縮小.........
如果只是做簡單繪圖是蠻方便的

 效能比我是用   畫一個太陽系  第一種直接畫在 picturebox 上,   第二種畫在Bitmap後 在存放到 Picturebox
以每秒畫30次  顯示太陽系的  公轉(由水星 到地球)  與月球繞地球轉

第一種雖然已經開啟 DoubleBuffer,但效果有限,第二種可以清楚看到  整個   公轉的狀況,所以評估 第二種直接在Bitmap上繪圖較優
(但缺點是 會比較吃記憶體)



第三種   就是 Graphicpath

就如同這功能的名, 繪圖的路徑。使用的概念如同一些繪圖軟體一樣,將要繪圖的 字  線   圖,將他們括印在記憶體
最後再一次畫出,主要針對 一次就要 顯示 或 重繪 多樣物件

這樣一方面比較省記憶體,一方面省去 繪圖的時間   (繪圖10次   變成   最後一次畫上去就好)


要先引用  System.Drawing.Drawing2D

程式碼片段

               Rect = new Rectangle(O.X - l / 2, O.Y - l / 2, l, l)
               mp[0].move(new Point(O.X, O.Y - l / 2))
               mp[1].move(new Point(O.X - l / 2, O.Y))
               mp[2].move(new Point(O.X + l / 2, O.Y))
               mp[3].move(new Point(O.X, O.Y + l / 2))

              
                Dim gp as GraphicPath= new GraphicsPath()
             
                gp.AddEllipse(Rect)
                gp.AddRectangle(mp[0].rect)
                gp.AddRectangle(mp[1].rect)
                gp.AddRectangle(mp[2].rect)
                gp.AddRectangle(mp[3].rect)


                g.DrawPath(pen1,gp)


                picturebox1.backgroundimage = bm

本來要分五次畫     (畫1個圓  與 5個框)
改成用 Graphicpath  一次就畫好了

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Rh 的頭像
    Rh

    程式狂想曲

    Rh 發表在 痞客邦 留言(0) 人氣()