我有一個非常簡單的應用程序寫在QT中,我想通過使用QMediaPlayer
來顯示電影,但在顯示任何幀之前我想檢測它的一些對象並標記它們通過在其上畫一個矩形。修改和顯示在QAbstractVideoSoSface中獲取的QVideoFrame
我讀過http://doc.qt.io/qt-5/videooverview.html,我可以訪問每個框架的子類QAbstractVideoSurface
,所以我決定。
class VideoSurface : public QAbstractVideoSurface {
Q_OBJECT
bool present(const QVideoFrame &frame) override {
if (surfaceFormat().pixelFormat() != frame.pixelFormat()
|| surfaceFormat().frameSize() != frame.size()) {
setError(IncorrectFormatError);
stop();
return false;
} else {
currentFrame = frame;
return true;
}
}
...
}
現在,我在該成員函數正在接收幀,我想通過借鑑它在哪裏檢測到的物體的地方矩形修改,然後,我想在屏幕上顯示它們(優選在某些插件) 。
我該怎麼做?
如果我
VideoSurface
類包含QWidget
成爲會員?或者我應該子類QWidget
其中將包含VideoSurface
?在這兩種情況下,我怎樣才能顯示這個框架?我應該先將它轉換爲
QImage
然後再顯示(這對我來說很方便,因爲我的檢測系統與QImage
一起工作,但效率會如何)?我知道我不能在繪畫事件之外繪畫,所以我不能在present
函數中繪畫,那麼究竟應該在哪裏繪製這個繪畫函數,以及我可以如何調用它?我應該在哪裏檢測這些對象並修改框架?在
present
函數中,還是在繪圖函數中?