2011-05-13 92 views
2

我有一个从相机接收图像的应用程序。该应用程序使用wxWidgets编写,我试图通过创建一个绘画事件来显示图像。每当我得到一个新的图像时,我都会在面板上调用Refresh。wxWidgets使用刷新绘制图像

大约半分钟到一分钟后,它停止响应绘画事件。我一直在寻找wxWidgets Wiki,但我似乎无法找到它为什么这样做(我相信我允许GUI事件循环运行)。

当我更改窗口大小时,它会正常刷新图像(所以它不会阻塞所有绘画事件)。

任何想法为什么会发生这种情况?

我不知道这会有多大帮助,但这是paint事件的代码。

void ImageViewer::onPaint(wxPaintEvent &event) 
{ 
    wxBufferedPaintDC dc(this); 

    cv::Mat buffer; 
    static int count = 0; 
    std::cout << "drawing " << ++count << std::endl; 
    { 
     // doing stuff in a lock 
    } 
    // it doesn't ever seem to get stuck in the lock 
    std::cout << "finished" << std::endl; 

    // buffer is an object with the image data buffered 
    wxImage img(buffer.rows, 
       buffer.cols, 
       buffer.data, true); 

    wxBitmap bmp(img); 
    dc.DrawBitmap(bmp, 0, 0); 
} 

我每次获取新图像并更改缓冲区(更改缓冲区在锁内完成)时都会调用刷新。

+0

它是时间还是数字相关?即如果您更改刷新调用的频率,是否在大约同一时间失败或刷新次数?即使显示不刷新,您是否获得调试输出? – ravenspoint 2011-05-13 16:51:43

+0

它似乎是刷新次数。当它停止刷新时,我没有得到任何输出(onPaint没有被调用,但我知道Refresh仍然被调用,因为我仍在打印接收新图像的部分)。 – 2011-05-13 17:52:49

回答

3

下面是一些尝试:在您调用Refresh()后立即调用Update()。

刷新使窗口无效,并将绘画请求排队。更新强制立即重绘任何无效的矩形。