将Qt小工具捕获为图像文件

vaj7vani  于 2022-09-26  发布在  其他
关注(0)|答案(6)|浏览(96)

我正在使用QGLWidget(OpenGL的Qt小工具),希望能够捕获小工具显示的屏幕作为JPEG文件。我怎样才能做到这一点呢?是否有一个函数可以将小部件上当前显示的内容作为图像返回?

gzjq41n4

gzjq41n41#

通常使用OpenGL时,可以使用glReadPixels()函数从帧缓冲区进行读取。这会将帧缓冲区内容放入您已分配的缓冲区中。然后,您需要一个将其转换为JPEG的函数。

但是,由于您使用的是QGLWidget,因此可以使用其grabFrameBuffer()方法以QImage对象的形式获取帧缓冲区内容。这可能是更好的方式。您可以获取帧缓冲区内容,然后使用QImage::save()保存到文件。

如果你转到Qt5的QOpenGLWidget,你会发现它有类似的grabFrameBuffer()方法。

s6fujrry

s6fujrry2#

QImage img(mywidget.size());
QPainter painter(&img);
mywidget.render(&painter);
img.save("/some/file.jpg");
3qpi33ja

3qpi33ja3#

以下是将小部件保存为图像的最简单方法,请使用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);
ahy6op9u

ahy6op9u4#

为什么不用非常简单的咒语

n8ghc7c1

n8ghc7c15#

QPixmap pixmap = QPixmap::grabWidget( &widget );
pixmap.save("widget.png");
chhqkbe1

chhqkbe16#

@roop答案的改进版本。

QPixmap pixmap(mywidget.sizeHint());
QPainter painter(&pixmap);
mywidget.render(&painter);
pixmap.save("/some/file.png");

更改:

  • 使用像素Map而不是图像
  • 使用大小提示而不是大小
  • 保存为无损PNG格式而不是JPEG格式

请注意,要实现这一点,小部件不需要显示在屏幕上。

相关问题