C++ 将QML场景渲染为纹理并保存

C++ 将QML场景渲染为纹理并保存,c++,qt,qml,C++,Qt,Qml,如何将QML场景(如矩形、图像等)转换为纹理并保存? 以前有人试过吗?如果我能将组件转换为纹理,那么我应该能够保存 通过粒子系统或着色器效果处理后的图像 例如: Rectangle{ id:root widht:640 height: 480 ToTexture{ id: toTexture} //a new type created by c++ MouseArea{ anchors.fill: parent onClicked: {

如何将QML场景(如矩形、图像等)转换为纹理并保存? 以前有人试过吗?如果我能将组件转换为纹理,那么我应该能够保存 通过粒子系统或着色器效果处理后的图像

例如:

Rectangle{
  id:root

  widht:640
  height: 480

  ToTexture{ id: toTexture} //a new type created by c++

  MouseArea{

     anchors.fill: parent

     onClicked: {         
         toTexture.saveAsTexture(root)
     }
  }
}
问题是,我怎样才能设计出像ToTexture这样的新类型? “场景图-QML下的OpenGL”的示例向我们展示了如何 渲染qml场景,但我找不到示例来演示如何 将qml场景传输到纹理


如果没有这个函数,我就无法保存QtQuick生成的图形。我在这篇文章中找到了另一个解决方案


我们可以拍摄qml场景的屏幕截图,然后我们可以对其执行任何操作,包括使用“qml场景”将其渲染为纹理

,你的意思是整个qml场景吗?在QtQuick2中,QQuickWindow::setRenderTarget非常简单,我猜QDeclarativeView::render到QImage在QQ1中也是一样的……确切地说,我想做shaderEffectSource所做的事情,将矩形、图像和其他组件渲染到纹理,并获取这些纹理的指针,通过QImage保存纹理。有什么例子吗?我在QML下找到了一个名为OpenGL的,向我们展示了如何渲染QML场景,但没有示例向我们展示如何将QML场景转换为纹理并保存它。在QtQuick2中,我们甚至不能像QQ1那样简单地将图像传输到QImage并保存它。谢谢,ddriver,您知道现在如何提取可视qml组件的原始帧缓冲区数据吗?我想将场景录制为视频,但找不到方法,grabWindow()对于视频来说太慢了