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