2011-05-13 101 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()。

刷新使窗口無效,並將繪畫請求排隊。更新強制立即重繪任何無效的矩形。