我正在使用QGLWidget(用于OpenGL的Qt小部件),并希望能够将小部件显示的屏幕捕获为JPEG文件。我怎样才能做到这一点?是否有一个函数可以将窗口小部件当前显示的内容作为图像返回?
答案 0 :(得分:15)
通常使用OpenGL,您可以使用glReadPixels()
函数从帧缓冲区读取。这会将帧缓冲内容放入已分配的缓冲区中。然后,您需要一个将其转换为JPEG的函数。
但是,当您使用QGLWidget
时,可以使用其grabFrameBuffer()
方法将帧缓冲区内容作为QImage
对象获取。这可能是更好的方法。您可以获取帧缓冲内容,然后使用QImage::save()
保存到文件中。
如果你转到Qt 5的QOpenGLWidget
,你会发现它有类似的
grabFrameBuffer()
方法。
答案 1 :(得分:9)
QImage img(mywidget.size());
QPainter painter(&img);
mywidget.render(&painter);
img.save("/some/file.jpg");
答案 2 :(得分:2)
以下是将小部件另存为图像的最简单方法,工作在Qt 5:
QString file = QFileDialog::getSaveFileName(this, "Save as...", "name", "PNG (*.png);; BMP (*.bmp);;TIFF (*.tiff *.tif);; JPEG (*.jpg *.jpeg)");
ui->myWidget->grab().save(file);
答案 3 :(得分:1)
为什么不使用非常简单的咒语QPixmap::grabWindow( m_widget->winId() ).save( "/some/file.jpg" )
答案 4 :(得分:-1)
QPixmap pixmap = QPixmap::grabWidget( &widget );
pixmap.save("widget.png");