如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能
小白摸索著編寫一個上位機(jī)界面,將遇到的問題及解決方法記錄下,以供后來的小白使用哈。這篇文章解決的問題是在繪圖時候的閃爍問題。其中網(wǎng)上有些介紹的設(shè)置控制方式controlstyle的方法,這個方法我的理解是比較適合于在一個完整的窗口當(dāng)中繪圖。如果要在一個窗口當(dāng)中的內(nèi)部容器或者控件內(nèi)畫圖的話就不太適合,通常按照前述的方法設(shè)置后沒有任何效果。對于在窗口內(nèi)部的繪圖的來說,比較有效的方法是在內(nèi)存當(dāng)中開辟一塊區(qū)域,先在內(nèi)存中繪制好圖后再在窗體中顯示出來。這個方法可以有效的消除或者減輕繪圖閃爍的問題。在C#中,提供了BufferedGraphics類來實現(xiàn)此功能。這篇文章就介紹如何用C#自帶的類來實現(xiàn)雙緩沖繪圖。
直接貼出完整的代碼
[csharp]?view plaincopy
注意,這個項目窗體中只含有一個panel1的控件。
代碼介紹,
1、實例化一個BufferedGraphicsContext類,相當(dāng)于在內(nèi)存當(dāng)中開辟了一片區(qū)域來準(zhǔn)備畫圖,
2、BufferedGraphics類不能直接使用new關(guān)鍵字實例化,需要使用BufferedGraphicsContext類的Allocate()方法指定,指定的方式可以參考MSDN。在上面的例子當(dāng)中,就把圖形緩沖區(qū)和窗口的panel控件聯(lián)系了起來。
3、指定背景圖顏色語句也是需要的,不然不加此句的話,畫出來控件panel1的背景默認(rèn)為黑色,我們可以根據(jù)需要來選擇顏色。其中若選中了白色,實際為透明的,選為WhiteSmoke的話則為白底。
4、BufferedGraphics,Render()將在緩沖區(qū)畫好的圖畫到窗體中,實現(xiàn)了雙緩沖功能,顯示完畢后要釋放所占系統(tǒng)資源。
5、在比較復(fù)雜的程序中,還要注意線程的安全問題。BufferedGraphics 類不是線程安全的。從單獨的線程中訪問圖形緩沖區(qū)時,一定要使用一個線程訪問控制機(jī)制
以避免發(fā)生沖突。
總結(jié)
以上是生活随笔為你收集整理的如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wireshark解析rtp协议,流媒体
- 下一篇: c# char unsigned_dll