• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

EmguCV控件Emgu.CV.UI.ImageBox及C#picturebox显示图片连续刷新出现闪烁问题 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

在上一篇里,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第一个程序:加载一张图片

 

这篇博客也有详细介绍:

 试了下,效率更低,闪烁更严重了。

 

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

 

于是尝试了下,结果问题解决了。很简单。

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

 

或者

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

 

 估计是设置图片后强制刷新才真正显示吧。

 

但是使用pictureBox显示图片有问题,就是长时间不断刷新后会崩溃。测试大概12小时多后程序崩溃。

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

 

还待继续研究。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
类型参数的约束(C#编程指南)(fromMSDN)发布时间:2022-07-10
下一篇:
画函数图形的C#程序(改进版) (转)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap