zoukankan      html  css  js  c++  java
  • 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吧

    还待继续研究。

  • 相关阅读:
    CodeForcesGym 100517B Bubble Sort
    CodeForcesGym 100517H Hentium Scheduling
    BZOJ 1208: [HNOI2004]宠物收养所
    BZOJ 1503: [NOI2004]郁闷的出纳员
    BZOJ 1588: [HNOI2002]营业额统计
    sublime 3 user Settings
    sublime 3 注册码
    Why does this json4s code work in the scala repl but fail to compile?
    cat 显示指定行
    Spark Kill Application
  • 原文地址:https://www.cnblogs.com/jhlong/p/5482873.html
Copyright © 2011-2022 走看看