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