如何快速重绘QQuickItem?

时间:2016-12-06 12:41:16

标签: c++ qt qtquick2 frame-rate

我有YUY2格式的图像流。我想在QQuickItem上绘制这些图像 - 所以我可以在Qt Quick 2中使用它。

我的性能有问题,所以我的问题是重写用C ++编写的QML对象的最快方法是什么?有没有专门用于渲染视频的对象?

我尝试过创建一个继承QQuickPaintedItem的类。我已将YUY2图像转换为RGBA8888格式,然后使用QImage加载它,然后使用QPainter绘制它。如果QQuickPaintedItem很大,则证明效率不高 - 例如大于1000x1000。更快捷的方法是将QImage转换为QPixmap,然后使用QPainter进行绘制。它现在有点好,但也许有更快的方法?例如,图像转换过程似乎太慢了。

1 个答案:

答案 0 :(得分:1)

我使用QQuickItem定义了updatePaintNode函数(来自Kuba Ober's评论的第一个想法)来实现这一点。

This example帮了我很多忙。其中NoisyNode类呈现背景(静态图像),Graph正在使用它。我把这两个课程带到了我的项目中并根据我的需要进行了调整。我没有问题显示1080x1920像素,30fps。据我所知,要显示一个视频,你最终需要将YUV转换为RGB,所以我立即做了这个并使用RGBA像素数组。