EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox顯示圖片連續刷新出現閃爍問題


 

在上一篇里,EmguCV(OpenCV)實現高效顯示漢字及疊加  實現了視頻疊加及顯示,但存在問題,就是 

Emgu.CV.UI.ImageBox及C# picturebox顯示圖片時都會出現閃爍,尤其是圖片的下方部分。

 

初步懷疑是電腦處理不過來,i3-3220 3.3Ghz 在1080p下cpu占用30%左右,480p下占用10%左右。480p下無閃爍現象。

 

一次把視頻顯示窗口調小,觀察很久未出現閃爍現象,於是懷疑是C# picturebox控件問題,Emgu.CV.UI.ImageBox也繼承了C# picturebox控件。

 

百度了一下  C# picturebox 閃爍  這些關鍵詞,發現很多相同問題。

大部分是要采用雙緩沖

this.DoubleBuffered = true;

 或者復雜點

this.SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Opaque, false);
this.UpdateStyles();

 

但是注意到picturebox沒有DoubleBuffered屬性,這里都是修改的窗體form的DoubleBuffered屬性 ,並沒有什么用。

還有各種復雜方法給picturebox加DoubleBuffered屬性的,還是沒啥用。

 

題外話,雙緩沖在sdl里顯示效果還是比較好的。SDL_SetVideoMode()    SDL第一個程序:加載一張圖片

 

這篇博客也有詳細介紹:

C# 在PictureBox 中繪圖防止閃爍的辦法

 試了下,效率更低,閃爍更嚴重了。

 

 注意到這篇博客里有pictureBox1.Refresh();

 

於是嘗試了下,結果問題解決了。很簡單。

image.Bitmap = bmp;
imageBox.Image = image;
imageBox.Refresh();

 

或者

pictureBox1.Image = bmp; 
pictureBox1.Refresh();

 

 估計是設置圖片后強制刷新才真正顯示吧。

 

但是使用pictureBox顯示圖片有問題,就是長時間不斷刷新后會崩潰。測試大概12小時多后程序崩潰。

所以還是先用Emgu.CV.UI.ImageBox吧

 

還待繼續研究。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM