首页 > 解决方案 > python 3+的缓冲函数

问题描述

我正在尝试使用 vtk_show 打开一个 vtk 窗口,但是每次执行此操作时我的 Ipython 控制台都会崩溃,显然这是因为 Ipython 无法显示外部窗口,而这正是 vtk_show 所做的。我在谷歌上搜索了一个解决方案,但它是为 python2 编写的(我使用的是 python 3.6.3)。这是我找到的解决方案:

import vtk
from IPython.display import Image

def vtk_show(renderer, width=400, height=300):
    """
    Takes vtkRenderer instance and returns an IPython Image with the 
    rendering.
    """
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.SetOffScreenRendering(1)
    renderWindow.AddRenderer(renderer)
    renderWindow.SetSize(width, height)
    renderWindow.Render()

    windowToImageFilter = vtk.vtkWindowToImageFilter()
    windowToImageFilter.SetInput(renderWindow)
    windowToImageFilter.Update()

    writer = vtk.vtkPNGWriter()
    writer.SetWriteToMemory(1)
    writer.SetInputConnection(windowToImageFilter.GetOutputPort())
    writer.Write()
    data = str(buffer(writer.GetResult()))

    return Image(data)

我在尝试使用bufferpython2 的内置函数时遇到错误,但由于 python3+ 上不存在此函数,所以我被卡住了。如果有人可以帮助我,我将不胜感激。提前致谢!

标签: pythonpython-3.xbuffervtk

解决方案


至少必须在您的代码上修改这两点,以使其具有与 Python 3 相同的行为:

所以该data = ...行应该是:

data = bytes(memoryview(writer.GetResult()))

推荐阅读