1. 程式人生 > >C# 沒有背景層的PICTUREBOX重繪閃爍解決辦法

C# 沒有背景層的PICTUREBOX重繪閃爍解決辦法

最近做一個醫療器械專案 終端的軟體需要顯示波形 但是在picturebox 重繪時發現閃爍現象嚴重

問題原因:重繪時呼叫picture的refresh 即在重繪間 會有一次picturebox什麼也不顯示 人眼看上去就像是閃爍。

解決思路:將重繪時下一張圖片作為背景貼在picturebox上 程式碼如下 此時不需要refresh函式

Bitmap image = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
                Graphics g = Graphics.FromImage(image);



                // 繪圖部分 Begin
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;   //開啟平滑處理

                Pen p2 = new Pen(Color.White, 1);//定義了一個白色,寬度為1的畫筆
                g.DrawLine(p2, 0, 40, 2400, 40);   //畫基準線
                p2.Dispose();
                Pen p = new Pen(Color.LimeGreen, 3);//定義了一個亮綠,寬度為3的畫筆
                g.DrawLines(p, point);//在畫板上畫波形圖
                p.Dispose();

                //畫波形擷取線
                Pen p3 = new Pen(Color.Red, 2);//定義了一個藍色,寬度為的畫筆
                g.DrawLine(p3, posx1, 0, posx1, 80);
                p3.Dispose();
                Pen p4 = new Pen(Color.Yellow, 2);//定義了一個藍色,寬度為的畫筆
                g.DrawLine(p4, posx2, 0, posx2, 80);   //畫基準線
                p4.Dispose();

                g.Dispose();
                // 繪圖部分 End

                pictureBox1.BackgroundImage = image; // 設定為背景層

思考:1 就算有refresh也應該很快 為何人眼能感覺到

2 這段程式碼如果新增image的dispose就會報錯 不知道為何

3 若有picturebox本身有背景 參閱http://blueve.me/archives/633