我想实现这样的功能,在主窗口实时采集灰度图像的视频信息,在子窗口显示实时的直方图,我现在做到了在子窗口的initdialog中显示静态的直方图,如何能进行实时的显示,而且没有刷屏的感觉?谢谢!

解决方案 »

  1.   

    怎么能在InitDialog实时绘制呢?
    1.一般响应WM_PAINT消息,在OnPaint函数中绘制.
    2.建议使用双缓冲技术,在内存DC中绘制好,然后将内存DC绘制在窗口中
    3.如果还想使界面不受影响,还得使用多线程技术.在工作线程中绘制内存DC
      

  2.   

    在InitDialog中进行实时绘制是做不到的重绘都是在OnPaint里面的,一般都通过内存DC实现双缓冲减少闪烁提高效率如果是选择时间间隔进行刷洗的话,可以用SetTimer弄个定时器进行定时刷新
      

  3.   

    把你的子窗口InitDialog()绘制直方图的功能代码抽出,封装成两个函数:
    void SetHistogramData(...); // 设置直方图信息数据
    void DrawHistogram(); // 绘制直方图,采用二楼tttyd老大的方法
    WM_PANIT响应函数中调用DrawHistogram();
    当外部视频抓到一帧图像时分析其直方图信息,分别调用void SetHistogramData(...)和DrawHistogram()。如果帧率高,CPU处理不过来,采用定时刷新的方法吧。
      

  4.   

    对不起,我说错了,我是在OnPaint() 事件中实现直方图的,我现在要做的就是使用双缓冲是吗?麻烦谁给我详细说明一下可以吗?怎么实现啊?
      

  5.   

    不要在InitDialog中画,不现实的写一个画直方图的函数, 在 WM_PAINT 或 WM_TIMER 中响应消息画图
      

  6.   

    双缓冲就死建立一个CDC的缓冲dc,画的时候画到这个dc上,然后再在这个dc把图像(改变过的)bitblt到显示的dc上........
      

  7.   

    实时显示就要调用invalidate(true),为了防止闪屏当然用双缓冲,opengl支持双缓冲,可以用opengl试