【问题标题】:pyqtgraph grabFrameBuffer saves an empty imagepyqtgraph grabFrameBuffer 保存一个空图像
【发布时间】:2021-03-19 20:27:32
【问题描述】:

我有一个 3D 渲染,看起来像我要保存的下图。然而,图像显示为黑色,没有绘制任何内容,我不知道为什么。我在这里遵循https://pyqtgraph.readthedocs.io/en/latest/exporting.html#exporting-3d-graphics 的指南,它没有提供很多帮助。它只是写glview.grabFrameBuffer().save('fileName.png')

以下是代码的重要部分。我用单线渲染替换了渲染线条和点云的部分。

import pyqtgraph.opengl as gl

from pyqtgraph.Qt import QtWidgets

if __name__ == '__main__':
    
    # initialize screen
    app = QtWidgets.QApplication(sys.argv)
    w = gl.GLViewWidget()
    
    line = np.array([[0,0,0],[1,1,1]])
    line_renderer = gl.GLLinePlotItem(pos=line, width=1, antialias=False)
    w.addItem(line_renderer)
    
    g = gl.GLGridItem()
    w.addItem(g)
    w.show()
    w.grabFrameBuffer().save('fileName.png')
    app.exec()

【问题讨论】:

    标签: python pyqtgraph


    【解决方案1】:

    grabFrameBuffer() 根据GLViewWidget 中显示的内容创建一个 QImage,但指令的呈现不是即时的,但您必须等待 Qt 完成。考虑到上述情况,解决方案是稍后使用 QTimer 执行此任务:

    QtCore.QTimer.singleShot(100, lambda: w.grabFrameBuffer().save("fileName.png"))
    

    【讨论】:

    • 谢谢!我不得不增加时间来用线条和点云渲染我的场景,因为我仍然得到一个 100 毫秒的空图像。有没有办法在渲染完成后自动确定长度或强制qt保存?还是我必须反复试验几个值?
    • @Kong 一般情况下应该高于刷新时间,一般是30ms,所以设置100ms才有图像。另一方面,我认为在它的实际应用中,由于我不知道的其他原因,它需要更长的时间,因为您没有提供该代码的 MRE,所以我不会为它指出任何其他内容:它不能表明任何关于我不知道的代码
    猜你喜欢
    • 2021-01-13
    • 2016-09-17
    • 2017-03-01
    • 2022-01-03
    • 2020-07-25
    • 2015-06-13
    • 1970-01-01
    • 2021-12-20
    • 2017-04-08
    相关资源
    最近更新 更多