37 #include "vtkRenderWindow.h"
38 #include "vtkRendererCollection.h"
39 #include "vtkImageData.h"
41 #include "vtkImageClip.h"
42 #include "vtkImagePermute.h"
43 #include "vtkImageResample.h"
44 #include "vtkWindowToImageFilter.h"
45 #include "vtkSmartPointer.h"
47 #include "vtkBMPWriter.h"
48 #include "vtkPostScriptWriter.h"
49 #include "vtkJPEGWriter.h"
50 #include "vtkPNGWriter.h"
51 #include "vtkTIFFWriter.h"
53 #include "QVTKWidget.h"
60 vtkImageData *screenshot,
63 if ( !image || !screenshot )
71 image->GetDimensions(image_dims);
72 if ( image_dims[0] == 0
74 || image_dims[2] == 0 )
79 vtkImageData *resample_input, *resample_output;
85 vtkSmartPointer< vtkImageClip > clip =
86 vtkSmartPointer< vtkImageClip >::New();
87 clip->SetInput(image);
88 clip->SetOutputWholeExtent( image->GetUpdateExtent() );
94 clip->GetOutput()->GetDimensions(clip_dims);
96 vtkSmartPointer< vtkImagePermute > permute =
97 vtkSmartPointer< vtkImagePermute >::New();
98 if ( clip_dims[2] != 1 )
100 permute->SetInput( clip->GetOutput() );
101 if ( clip_dims[0] == 1 )
103 permute->SetFilteredAxes(1, 2, 0);
107 permute->SetFilteredAxes(0, 2, 1);
109 resample_input = permute->GetOutput();
113 resample_input = clip->GetOutput();
116 resample_input->Update();
117 int resample_input_dims[3];
119 resample_input->GetDimensions(resample_input_dims);
120 double *resample_input_spacing = resample_input->GetSpacing();
122 int large_dim = 0, small_dim = 1;
123 if ( resample_input_dims[0] < resample_input_dims[1] )
131 vtkSmartPointer< vtkImageResample > resample =
132 vtkSmartPointer< vtkImageResample >::New();
133 resample->SetInput(resample_input);
134 resample->SetInterpolationModeToCubic();
135 resample->SetDimensionality(2);
139 double factor =
static_cast< double >( tsize )
140 / static_cast< double >( resample_input_dims[large_dim] );
142 resample->SetAxisMagnificationFactor(large_dim, factor);
143 resample->SetAxisMagnificationFactor(
144 small_dim, factor * ( resample_input_spacing[small_dim]
145 / resample_input_spacing[large_dim] ) );
147 resample_output = resample->GetOutput();
150 screenshot->ShallowCopy(resample_output);
154 screenshot->ShallowCopy(resample_input);
164 vtkRenderWindow *win,
165 vtkImageData *screenshot,
168 if ( win && screenshot )
170 vtkSmartPointer< vtkWindowToImageFilter > filter =
171 vtkSmartPointer< vtkWindowToImageFilter >::New();
172 filter->ShouldRerenderOff();
173 filter->SetInput(win);
188 const unsigned int & iSnapshotId)
190 vtkSmartPointer< vtkImageData > image =
191 vtkSmartPointer< vtkImageData >::New();
201 filename.append(
".bmp");
202 vtkWriteImage< vtkBMPWriter >(image, filename);
207 filename.append(
".eps");
208 vtkWriteImage< vtkPostScriptWriter >(image, filename);
213 filename.append(
".jpeg");
214 vtkWriteImage< vtkJPEGWriter >(image, filename);
219 filename.append(
".png");
220 vtkWriteImage< vtkPNGWriter >(image, filename);
225 filename.append(
".tiff");
226 vtkWriteImage< vtkTIFFWriter >(image, filename);
231 std::cerr <<
"FileType is not supported for Snapshot" << std::endl;
242 vtkRenderWindow *renwin = iWidget->GetRenderWindow();
244 iView->SetRenderWindow(renwin);
245 iView->SetRenderer( renwin->GetRenderers()->GetFirstRenderer() );
246 iView->SetupInteractor( iWidget->GetInteractor() );
bool BuildScreenshotFromRenderWindow(vtkRenderWindow *win, vtkImageData *screenshot, int tsize)
QString & append(QChar ch)
void SetupViewGivenQVTKWidget(vtkViewImage2D *iView, QVTKWidget *iWidget)
bool BuildScreenshotFromImage(vtkImageData *image, vtkImageData *screenshot, int tsize)
QString SnapshotView(QVTKWidget *iWidget, const GoFigure::FileType &iType, const QString &iBaseName, const unsigned int &iSnapshotId)
Basic class to handle 2D/3D items such as images and polydatas visualization in 2D.