1. 程式人生 > >C# 通過GDI+雙緩衝解決繪圖閃爍的問題

C# 通過GDI+雙緩衝解決繪圖閃爍的問題

總體思路:

        把圖先畫在bitmap上,每次都通過drawimage將bitmap傳到顯示裝置,雙快取的graphics不用每次都create一個,這樣會閃爍,解決方法是定義一個全域性的BufferedGraphics graphBuffer,然後在每次畫的時候取緩衝區內的graphics。

具體步驟:

1. 定義一個全域性的BufferedGraphics graphBuffer,初始化語句為(寫在初始化函式內):

C# code?
1graphBuffer = (new BufferedGraphicsContext()).Allocate(Form1_Paint.CreateGraphics(), Form1_Paint
.DisplayRectangle);
    2.建立bitmap(從第2步開始,在繪圖函式內進行,例如:private void Form1_Paint(object sender, PaintEventArgs e)

     Bitmap b = new Bitmap(this.DisplayRectangle.Width,this.DisplayRectangle.Height);
3. 新建Graphic與Bitmap
繫結     

    Graphics g = Graphics.FromImage((System.Drawing.Image)b);

    4. 繪圖,呼叫g繪圖即可,例如:
        g.DrawLine(new Pen(Color.Red, 2), new Point(0,0), new Point(10,10));

    5. 呼叫緩衝區內的Graphic,用於繪製Bitmap圖(需要先清空之前的畫布,最後需要Render):

        Graphics diaplayGraphic= this.graphBuffer.Graphics;

     diaplayGraphic.Clear(this.BackColor);
     diaplayGraphic.DrawImage(b, 0, 0);
      this.graphBuffer.Render();

    至此,已經可以解決閃爍問題。