【问题标题】:wxWidgets Painting Image with RefreshwxWidgets 用刷新绘制图像
【发布时间】:2011-05-13 02:21:46
【问题描述】:

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

大约半分钟到一分钟后,它会停止响应绘制事件。我一直在查看 wxWidgets Wiki,但我似乎无法找到它这样做的原因(我相信我允许 GUI 事件循环运行)。

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

知道为什么会这样吗?

我不确定这会有多大帮助,但这里是绘制事件的代码。

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);
}

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

【问题讨论】:

  • 是时间还是数字相关?即,如果您更改刷新调用的频率,它会在大约同一时间失败,还是刷新次数?即使没有刷新显示,您是否获得了调试输出?
  • 似乎是刷新次数。当它停止刷新时我没有得到任何输出(onPaint 没有被调用,但我知道 Refresh 仍在被调用,因为我仍在打印接收新图像的部分)。

标签: wxwidgets


【解决方案1】:

这里有一些尝试:在调用 Refresh() 后立即调用 Update()。

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

【讨论】:

    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2015-04-23
    相关资源
    最近更新 更多