Hi all,
I´d like to export the current content of a vtkRenderWindow to the clipboard. Is there a straightforward way to achieve this?
thanks!
Hi all,
I´d like to export the current content of a vtkRenderWindow to the clipboard. Is there a straightforward way to achieve this?
thanks!
G’day,
Do you mean capturing de screen or the actual 3D primitives in the scene?
best,
PC
I think by current content, you’re interested in the pixels. VTK, by itself doesn’t have a method to save pixels to the OS clipboard. However, it has the pieces necessary to build such a feature. Note that this is way easier with Qt and VTK.
vtkWindowToImageFilter is a class which captures a screenshot of the render window and outputs a vtkImageData
. Here’s pseudocode
import vtk
windowCapture = vtk.vtkWindowToImageFilter()
windowCapture.SetInput(renderWindow)
# jpeg writer writes into this array.
jpegImage = vtkUnsignedCharArray()
jpegWriter = vtk.vtkJPEGWriter()
jpegWriter.SetInputConnection(windowCapture)
jpegWriter.SetResult(jpegImage)
jpegWriter.WriteToMemoryOn()
jpegWriter.Write()
# Copy `jpegImage` into clipboard
After that, you can save the in-memory string (jpegImage
) into the clipboard with OS-specific APIs. See Windows clipboard.
Thanks, this looks great!
I went a different route, though, which I hope is allowed to share here - it may be helpful to others.
I use VTK from inside a Qt application. And QVTKRenderWindow
inherits from QOpenGLWidget
. Thus,
QImage img = renderWidget->grabFramebuffer();
QGuiApplication::clipboard()->setImage(img);
does the trick.
Yep, with Qt, it’s far easier. Thanks for sharing!