2016-12-06 217 views
0

我有一個圖像流,以YUY2格式。我想在QQuickItem上繪製這些圖像 - 所以我可以在Qt Quick 2中使用它。如何快速重繪QQuickItem?

我有一個性能問題,所以我的問題是什麼才能重繪用C++編寫的QML對象的最快方法?有沒有一種專門用於渲染視頻的對象?


我試過的是創建一個繼承QQuickPaintedItem的類。我已將YUY2圖像轉換爲RGBA8888格式,然後使用QImage加載它,然後使用QPainter將其繪製。如果QQuickPaintedItem很大 - 例如大於1000x1000,則證明效率不高。更快的方法是將QImage轉換爲QPixmap,然後使用QPainter進行繪製。它現在有點好,但也許有更快的方法?例如圖像轉換似乎太慢了過程。

+3

如果您使用'QQuickPaintedItem',則不會獲得更好的性能。您可以使用自定義幾何體和簡單着色器來實現一個項目,以便用您期望的紋理填充四邊形。然後提供項目新的紋理。顯示和縮放將非常快速。可能已經有這樣的例子。您也可以使用'QQuickFramebufferObject'並更新渲染子對象的紋理。 –

+0

@KubaOber感謝您的幫助。如果你願意,發表你的評論作爲答案,我會接受它。 –

回答

0

我得到這個工作,通過使用QQuickItem與定義updatePaintNode函數(從Kuba Ober's評論的第一個想法)。

This example幫了我不少。其中NoisyNode課堂渲染背景(靜態圖像)和Graph正在使用它。我已經將這兩個班級帶到了我的項目中,並根據我的需要進行了調整。我沒有問題顯示1080x1920像素,30fps。據我所知,顯示一個視頻,你最終需要將YUV轉換爲RGB,所以我立即做了這個工作,並使用RGBA像素陣列。