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);
}
我每次獲取新圖像並更改緩衝區(更改緩衝區在鎖內完成)時都會調用刷新。
它是時間還是數字相關?即如果您更改刷新調用的頻率,是否在大約同一時間失敗或刷新次數?即使顯示不刷新,您是否獲得調試輸出? – ravenspoint 2011-05-13 16:51:43
它似乎是刷新次數。當它停止刷新時,我沒有得到任何輸出(onPaint沒有被調用,但我知道Refresh仍然被調用,因爲我仍在打印接收新圖像的部分)。 – 2011-05-13 17:52:49