我正在尝试将OpenGL的QGraphicsScene保存为图像(png或jpeg),但我不希望图像依赖于当前视图(缩放)。这就是为什么我不使用grabFrameBuffer而是使用render()代替:
QImage imgToSave(1024,768,QImage::Format_ARGB32_Premultiplied);
// fill the image
// and define rectbuffer(), the QRect() containing what I want to save
QPainter painter(&imgToSave);
m_scene = new QGraphicsScene;
// fill the Scene
m_scene->render(&painter,imgToSave.rect(),rectbuffer());
确实有效。我的问题是:它是否使用OpenGL功能? 如果没有,该怎么做?
n.b。 :我正在使用QGLWidget作为我的GraphicsView的视口。使用OpenGL的显示器正在工作。我担心的是图像保存。
答案 0 :(得分:1)
我猜:不。因为要通过OpenGL渲染QGraphicsScene,你需要指定一个QGLWidget派生对象作为场景的视口 - 你没有,所以它几乎肯定使用光栅引擎。其次,QPainter使用你构造它的任何绘图设备作为后端,你指定了一个不使用OpenGL的直接QImage。
如果您不能/不会在QGLWidget
中使用QGraphicsView
,那么您可能能够呈现到QGLFramebufferObject
。但这带来了它自身的复杂性,即你必须事先创造一个隐藏的背景。