VTK 截图

vtk的vtkRenderWindowInteractor中的Initialize函数初始化了可交互的窗口,但是实际工程中,往往需要把窗口拿出来在别的页面上显示,如存为png图片等等。本文主要介绍如何截取当前窗口的画面。

//renWin:当前活动窗口;
//pdata:截图后返回的数据指针,RGBA,32位,存储格式为RGBARGBA....
//maxlen: 防止pdata开辟的空间不够
bool GetOutput(vtkRenderWindow *renWin,unsigned char* pdata, int maxlen)
{
    int w = renWin->GetSize()[0];
    int h = renWin->GetSize()[1];
    if (maxlen<w*h * 4)
        return false;
    vtkSmartPointer<vtkUnsignedCharArray> pixels = vtkSmartPointer<vtkUnsignedCharArray>::New();
    pixels->SetArray(pdata, w*h * 4, 1);
    renWin->GetRGBACharPixelData(0, 0, h - 1, w - 1, 1, pixels);
    return true;
}

通过上述代码可以截取所需窗口的当前场景,除此方式外,也可以存为png格式只需调用vtk的png类即可。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

VTK实现图片输出比较简单,有如下两个步骤:

1.将VTK窗口内容转换为图片数据。

 

  1. vtkWin32OpenGLRenderWindow window = new vtkWin32OpenGLRenderWindow();
  2. ....
  3. vtkWindowToImageFilter filter = new vtkWindowToImageFilter();
  4. filter.SetInput(window );
  5.          

2.将图片数据转换输出为指定格式的图片。(下面的代码以PNG格式文件输出为例)

  1. vtkPNGWriter writer = new vtkPNGWriter();
  2. writer.SetFileName(sFileName);
  3. writer.SetInput(filter.GetOutput());
  4. writer.Write();
  5. writer.Update();
 
 

 

posted @ 2017-07-13 09:59  jackieron  阅读(1587)  评论(0编辑  收藏  举报