我有一个从相机接收图像的应用程序。该应用程序是使用 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);
}
每次获取新图像并更改缓冲区时,我都会调用刷新(更改缓冲区是在锁内完成的)。
这里有一些尝试:在调用 Refresh() 后立即调用 Update()。
刷新会使窗口失效,并使绘制请求排队。 更新强制立即重新绘制任何无效的矩形。