Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - Léon Bérard cancer center http://www.centreleonberard.fr
- CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
This software is distributed WITHOUT ANY WARRANTY; without even
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
#include <algorithm>
#include <QMessageBox>
#include "vvMesh.h"
#include "vvStructSelector.h"
#include "vvMeshReader.h"
-#include "vvConstants.h"
#include "clitkConfiguration.h"
// ITK include
-#include "itkImage.h"
-#include "itkImageFileReader.h"
-#include "itkByteSwapper.h"
-#include "itkCommand.h"
-#include "itkNumericSeriesFileNames.h"
+#include <itkImage.h>
+#include <itkImageFileReader.h>
+#include <itkByteSwapper.h>
+#include <itkCommand.h>
+#include <itkNumericSeriesFileNames.h>
// VTK include
-#include "vtkImageData.h"
-#include "vtkImageActor.h"
-#include "vtkCornerAnnotation.h"
-#include "vtkRenderWindow.h"
-#include "vtkRenderWindowInteractor.h"
-#include "vtkRenderer.h"
-#include "vtkRendererCollection.h"
-#include "vtkWindowToImageFilter.h"
-#include "vtkBMPWriter.h"
-#include "vtkTIFFWriter.h"
-#include "vtkPNMWriter.h"
-#include "vtkPNGWriter.h"
-#include "vtkJPEGWriter.h"
-#include "vtkMatrix4x4.h"
-#include "vtkTransform.h"
+#include <vtkImageData.h>
+#include <vtkImageActor.h>
+#include <vtkCornerAnnotation.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
+#include <vtkRendererCollection.h>
+#include <vtkWindowToImageFilter.h>
+#include <vtkBMPWriter.h>
+#include <vtkTIFFWriter.h>
+#include <vtkPNMWriter.h>
+#include <vtkPNGWriter.h>
+#include <vtkJPEGWriter.h>
+#include <vtkFFMPEGWriter.h>
+#ifdef VTK_USE_MPEG2_ENCODER
+ #include <vtkMPEG2Writer.h>
+#endif
+#include <vtkMatrix4x4.h>
+#include <vtkTransform.h>
// Standard includes
#include <iostream>
}
}
if (vector.size() > 0)
- LoadImages(vector, MERGED);
+ LoadImages(vector, vvImageReader::MERGED);
}
//------------------------------------------------------------------------------
std::vector<std::string> vector;
for (int i = 0; i < files.size(); i++)
vector.push_back(files[i].toStdString());
- LoadImages(vector, SLICED);
+ LoadImages(vector, vvImageReader::SLICED);
}
//------------------------------------------------------------------------------
}
sort(vector.begin(),vector.end());
if (vector.size() > 1)
- LoadImages(vector, MERGEDWITHTIME);
+ LoadImages(vector, vvImageReader::MERGEDWITHTIME);
else
QMessageBox::warning(this,tr("Reading problem"),"You need to select at least two images to merge images with time.\nIf you only want to open one image, please use the \"Open Image\" function.");
}
std::cout << "dicomSeriesSelector " << std::endl;
if (dicomSeriesSelector->exec() == QDialog::Accepted) {
files = *(dicomSeriesSelector->GetFilenames());
- LoadImages(files,DICOM);
+ LoadImages(files, vvImageReader::DICOM);
}
}
//------------------------------------------------------------------------------
std::vector<std::string> vector;
for (int i = 0; i < files.size(); i++)
vector.push_back(files[i].toStdString());
- LoadImages(vector, IMAGE);
+ LoadImages(vector, vvImageReader::IMAGE);
}
//------------------------------------------------------------------------------
void vvMainWindow::OpenRecentImage()
std::vector<std::string> images;
images.push_back(caller->text().toStdString());
mInputPathName = itksys::SystemTools::GetFilenamePath(images[0]).c_str();
- LoadImages(images,IMAGE);
+ LoadImages(images, vvImageReader::IMAGE);
}
//------------------------------------------------------------------------------
for (int i = 0; i < files.size(); i++) {
vector.push_back(files[i].toStdString());
}
- LoadImages(vector, IMAGEWITHTIME);
+ LoadImages(vector, vvImageReader::IMAGEWITHTIME);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
-void vvMainWindow::LoadImages(std::vector<std::string> files, LoadedImageType filetype)
+void vvMainWindow::LoadImages(std::vector<std::string> files, vvImageReader::LoadedImageType filetype)
{
//Separate the way to open images and dicoms
int fileSize;
- if (filetype == IMAGE || filetype == IMAGEWITHTIME)
+ if (filetype == vvImageReader::IMAGE || filetype == vvImageReader::IMAGEWITHTIME)
fileSize = files.size();
else
fileSize = 1;
std::vector<unsigned int> nSlices;
nSlices.resize(files.size());
std::fill(nSlices.begin(), nSlices.end(), 1);
- if (filetype == SLICED) {
+ if (filetype == vvImageReader::SLICED) {
for (int i = 0; i < fileSize; i++) {
itk::ImageIOBase::Pointer header = clitk::readImageHeader(files[i]);
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Change filename if an image with the same already exist
int number = GetImageDuplicateFilenameNumber(files[i] + std::string("_slice"));
- if (filetype == IMAGE || filetype == IMAGEWITHTIME || filetype == SLICED)
+ if (filetype == vvImageReader::IMAGE || filetype == vvImageReader::IMAGEWITHTIME || filetype == vvImageReader::SLICED)
SetImageSucceed = imageManager->SetImage(files[i],filetype, number, j);
else {
SetImageSucceed = imageManager->SetImages(files,filetype, number);
bool showVertical = false;
if (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 3
|| (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 2
- && mSlicerManagers[slicer]->GetType() != IMAGEWITHTIME
- && mSlicerManagers[slicer]->GetType() != MERGEDWITHTIME))
+ && mSlicerManagers[slicer]->GetType() != vvImageReader::IMAGEWITHTIME
+ && mSlicerManagers[slicer]->GetType() != vvImageReader::MERGEDWITHTIME))
showVertical = true;
if (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 3
- || mSlicerManagers[slicer]->GetType() == IMAGEWITHTIME
- || mSlicerManagers[slicer]->GetType() == MERGEDWITHTIME)
+ || mSlicerManagers[slicer]->GetType() == vvImageReader::IMAGEWITHTIME
+ || mSlicerManagers[slicer]->GetType() == vvImageReader::MERGEDWITHTIME)
showHorizontal = true;
if (showVertical)
//------------------------------------------------------------------------------
void vvMainWindow::SaveNOScreenshot()
{
- vtkWindowToImageFilter *w2i = vtkWindowToImageFilter::New();
- w2i->SetInput(NOViewWidget->GetRenderWindow());
- w2i->Update();
- SaveScreenshot(w2i->GetOutput());
- w2i->Delete();
+ SaveScreenshot(NOViewWidget);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void vvMainWindow::SaveNEScreenshot()
{
- vtkWindowToImageFilter *w2i = vtkWindowToImageFilter::New();
- w2i->SetInput(NEViewWidget->GetRenderWindow());
- w2i->Update();
- SaveScreenshot(w2i->GetOutput());
- w2i->Delete();
+ SaveScreenshot(NEViewWidget);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void vvMainWindow::SaveSOScreenshot()
{
- vtkWindowToImageFilter *w2i = vtkWindowToImageFilter::New();
- w2i->SetInput(SOViewWidget->GetRenderWindow());
- w2i->Update();
- SaveScreenshot(w2i->GetOutput());
- w2i->Delete();
+ SaveScreenshot(SOViewWidget);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void vvMainWindow::SaveSEScreenshot()
{
- vtkWindowToImageFilter *w2i = vtkWindowToImageFilter::New();
- w2i->SetInput(SEViewWidget->GetRenderWindow());
- w2i->Update();
- SaveScreenshot(w2i->GetOutput());
- w2i->Delete();
+ SaveScreenshot(SEViewWidget);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
-void vvMainWindow::SaveScreenshot(vtkImageData* image)
+void vvMainWindow::SaveScreenshot(QVTKWidget *widget)
{
QString Extensions = "Images( *.png);;";
Extensions += "Images( *.jpg);;";
Extensions += "Images( *.bmp);;";
Extensions += "Images( *.tif);;";
Extensions += "Images( *.ppm)";
+#ifdef VTK_USE_FFMPEG_ENCODER
+ Extensions += "Images( *.avi)";
+#endif
+#ifdef VTK_USE_MPEG2_ENCODER
+ Extensions += "Images( *.mpg)";
+#endif
+
+ int smIndex=GetSlicerIndexFromItem(DataTree->selectedItems()[0]);
QString fileName = QFileDialog::getSaveFileName(this,
tr("Save As"),
- itksys::SystemTools::GetFilenamePath(
- mSlicerManagers[0]->GetFileName()).c_str(),
+ itksys::SystemTools::GetFilenamePath(mSlicerManagers[smIndex]->GetFileName()).c_str(),
Extensions);
+
if (!fileName.isEmpty()) {
+ vtkSmartPointer<vtkWindowToImageFilter> w2i = vtkSmartPointer<vtkWindowToImageFilter>::New();
+ w2i->SetInput(widget->GetRenderWindow());
+ w2i->Update();
+ vtkImageData *image = w2i->GetOutput();
+
const char *ext = fileName.toStdString().c_str() + strlen(fileName.toStdString().c_str()) - 4;
if (!strcmp(ext, ".bmp")) {
vtkBMPWriter *bmp = vtkBMPWriter::New();
jpg->SetFileName(fileName.toStdString().c_str());
jpg->Write();
jpg->Delete();
+#ifdef VTK_USE_FFMPEG_ENCODER
+ } else if (!strcmp(ext, ".avi")) {
+ vtkFFMPEGWriter *mpg = vtkFFMPEGWriter::New();
+ mpg->SetInput(image);
+ mpg->SetFileName(fileName.toStdString().c_str());
+ mpg->SetQuality(2);
+ mpg->SetRate(5);
+ mpg->Start();
+
+ vvImage * vvImg = mSlicerManagers[smIndex]->GetImage();
+ int nSlice = vvImg->GetVTKImages().size();
+ for(int i=0; i<nSlice; i++)
+ {
+ mSlicerManagers[smIndex]->SetNextTSlice(0);
+ vtkSmartPointer<vtkWindowToImageFilter> w2i = vtkSmartPointer<vtkWindowToImageFilter>::New();
+ w2i->SetInput(widget->GetRenderWindow());
+ w2i->Update();
+ mpg->SetInput(w2i->GetOutput());
+ mpg->Write();
+ }
+ mpg->End();
+ mpg->Delete();
+#endif
+#ifdef VTK_USE_MPEG2_ENCODER
+ } else if (!strcmp(ext, ".mpg")) {
+ vtkMPEG2Writer *mpg = vtkMPEG2Writer::New();
+ mpg->SetInput(image);
+ mpg->SetFileName(fileName.toStdString().c_str());
+ mpg->Start();
+
+ vvImage * vvImg = mSlicerManagers[smIndex]->GetImage();
+ int nSlice = vvImg->GetVTKImages().size();
+ for(int i=0; i<nSlice; i++)
+ {
+ mSlicerManagers[smIndex]->SetNextTSlice(0);
+ vtkSmartPointer<vtkWindowToImageFilter> w2i = vtkSmartPointer<vtkWindowToImageFilter>::New();
+ w2i->SetInput(widget->GetRenderWindow());
+ w2i->Update();
+ mpg->SetInput(w2i->GetOutput());
+ mpg->Write();
+ }
+ mpg->End();
+ mpg->Delete();
+#endif
} else {
QMessageBox::information(this,tr("Problem saving screenshot !"),tr("Cannot save image.\nPlease set a file extension !!!"));
}
}
-
}
//------------------------------------------------------------------------------