Qt視覺軟件開發過程中,問題記錄與思考 QPixmap::fromImage(img)訪問衝突

1、函數的輸出型參數用&修飾。

經典案例 swap(a,b),如果把b當做輸出型參數,這個函數不會改變b。因爲值傳遞深拷貝。參考我博客c++筆記2(參考learncpp.com) - 夕西行 - 博客園 (cnblogs.com)的1部分標籤內容。

我在相機幀轉爲QImage格式時犯了這個錯誤。

在其他地方調用

這個img是空的,因爲對象img本身不會被改變。

2、圖像格式轉換爲QImage後,emit這個QImage可能出現的問題

情況一:轉換後直接emit

 情況二:先調用封裝的轉換函數,再emit

 這種情況可能出現 QPixmap::fromImage(img)訪問衝突,在轉換函數內用深拷貝解決。

OutImage = QImage(buffer, width, height, QImage::Format_RGB888).copy();

 3、成功採集的幀指針建議深拷貝後使用。

幀指針指向的空間持續被相機清空、賦值。當採集成功時,如果讓自定義的指針 m_ptr_success 指向這個成功採集的幀指針。那麼在使用 m_ptr_success 的過程中可能造成內存讀寫衝突。

當然,也可以通過加鎖方式解決。

 4、推薦使用官方相機SDK中的回調函數

當然也可以自己創建線程,將拉流死循環放在線程中執行。

5、connect不應該放在頻繁觸發函數中

如,按鈕繼續、暫停來回頻繁按下。

可以打開相機時connect,關閉相機時disconnect。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章