我尝试了我发现的所有内容,只保存了我没有成功的图像。 我的图像是124x126,所以当图像保存时,它总是带边框和新尺寸300x300,如果我使用另一个程序只选择我的图像它是208x209。 所以我不知道为什么我的图像缩放,为什么它总是300x300,如果我将vtkRenderWindow的大小更改为124x126,边框仍然存在,我的图像缩小。 我的问题是如何在没有边框的情况下保存124x126的图像?
mapper.SetInputConnection(polyDataReader.GetOutputPort());
vtkActor actor = new vtkActor();
actor.SetMapper(mapper);
actor.GetBounds(bounds);
System.out.println("actor: " + bounds[1] + " x " + bounds[3]); // 124x126 (everything's ok)
//Create a renderer, render window, and interactor
vtkRenderer renderer = new vtkRenderer();
vtkRenderWindow renderWindow = new vtkRenderWindow();
renderWindow.BordersOff(); // the borders are still there
renderWindow.AddRenderer(renderer);
vtkRenderWindowInteractor renderWindowInteractor = new vtkRenderWindowInteractor();
renderWindowInteractor.SetRenderWindow(renderWindow);
//Add the actor to the scene
renderer.AddActor(actor);
renderer.SetBackground(0, 0, 0);
//Render and interact
renderWindow.Render();
//screenshot code:
vtkWindowToImageFilter w2if = new vtkWindowToImageFilter();
w2if.SetInput(renderWindow);
w2if.Update();
vtkPNGWriter writer = new vtkPNGWriter();
writer.SetFileName("out.png"); //my image with borders 300x300 !!!!??
writer.SetInputData(w2if.GetOutput());
writer.Write();
ps:对不起我的英文
答案 0 :(得分:0)
这是因为您的渲染窗口的默认大小为300x300。
你要意识到的是,polydata是在3D场景中渲染的,你所谓的" border"是背景,其数量取决于缩放级别,即在相机的位置。为了得到你想要的东西,你需要做两件事:
renderWindow.SetSize(bounds[1], bounds[3]);
renderer.GetActiveCamera().SetParallelScale(1); // we want parallel projection
renderer.GetActiveCamera().SetParallelScale(0.5 * (bounds[3] - bounds[2])); // zoom
缩放的范围可能是0.5 *(边界[1] - 边界[0]),不完全确定它应该是矩形的哪一边。
希望这有帮助,
米罗