]> Creatis software - clitk.git/blobdiff - vv/vvImageReader.txx
add slider for temporal dim (not used)
[clitk.git] / vv / vvImageReader.txx
index d0247fe7d072ea11c255dc6be98a3e543b287d08..31937bfbc229fe83919f721cbeeb4dce6f772c1e 100644 (file)
@@ -27,6 +27,7 @@
 #include <vtkTransform.h>
 
 #include "clitkCommon.h"
+#include "clitkConfiguration.h"
 #include "vvFromITK.h"
 #include "vvConstants.h"
 
@@ -74,15 +75,12 @@ void vvImageReader::UpdateWithDimAndInputPixelType()
     // one at the time to avoid excessive
     // memory use
   {
-    typedef itk::Image< InputPixelType, VImageDimension-1 > InputImageType;
-    typedef itk::ImageFileReader<InputImageType> ReaderType;
-    typename ReaderType::Pointer reader = ReaderType::New();
-    typedef itk::ImageToVTKImageFilter <InputImageType> ConnectorType;
-    typename ConnectorType::Pointer connector = ConnectorType::New();
-    connector->SetInput(reader->GetOutput());
     mImage=vvImage::New();
     for (std::vector<std::string>::const_iterator i=mInputFilenames.begin(); i!=mInputFilenames.end(); i++) {
-      std::cout << (*i) << std::endl;
+      typedef itk::Image< InputPixelType, VImageDimension-1 > InputImageType;
+      typedef itk::ImageFileReader<InputImageType> ReaderType;
+      typename ReaderType::Pointer reader = ReaderType::New();
+      reader->ReleaseDataFlagOn();
       reader->SetFileName(*i);
       try {
         reader->Update();
@@ -94,17 +92,42 @@ void vvImageReader::UpdateWithDimAndInputPixelType()
         mLastError = error.str();
         return;
       }
-      try {
-        connector->Update();
-      } catch ( itk::ExceptionObject & err ) {
-        std::cerr << "Error while setting vvImage from ITK (MERGEDWITHTIME)"
-                  << " " << err << std::endl;
-      }
-      //vtkImageData *image = vtkImageData::New();
-      //image->ShallowCopy(connector->GetOutput());
-      vtkImageData *image = connector->GetOutput();
-      mImage->AddImage(image);
+      mImage->AddItkImage<InputImageType>(reader->GetOutput());
+    }
+  } else if (mType == SLICED) {
+    mImage=vvImage::New();
+    typedef itk::Image< InputPixelType, VImageDimension > InputImageType;
+    typedef itk::ImageFileReader<InputImageType> ReaderType;
+    typename ReaderType::Pointer reader = ReaderType::New();
+    reader->SetFileName(mInputFilenames[0]);
+    reader->UpdateOutputInformation();
+
+    typedef itk::Image< InputPixelType, VImageDimension-1 > SlicedImageType;
+    typedef itk::ExtractImageFilter<InputImageType, SlicedImageType> FilterType;
+
+    typename InputImageType::RegionType inputRegion = reader->GetOutput()->GetLargestPossibleRegion();
+    typename InputImageType::SizeType inputSize = inputRegion.GetSize();
+    typename InputImageType::IndexType start = inputRegion.GetIndex();
+    typename InputImageType::SizeType extractedRegionSize = inputSize;
+    typename InputImageType::RegionType extractedRegion;
+    extractedRegionSize[VImageDimension - 1] = 0;
+    extractedRegion.SetSize(extractedRegionSize);
+    start[VImageDimension - 1] = mSlice;
+    extractedRegion.SetIndex(start);
+
+    typename FilterType::Pointer filter = FilterType::New();
+    filter->SetExtractionRegion(extractedRegion);
+    filter->SetInput(reader->GetOutput());
+    filter->ReleaseDataFlagOn();
+    try {
+      filter->Update();
+    }
+    catch ( itk::ExceptionObject & err ) {
+      std::cerr << "Error while slicing " << mInputFilenames[0].c_str()
+                << "(slice #" << mSlice << ") " << err << std::endl;
+      return;
     }
+    mImage->AddItkImage<SlicedImageType>(filter->GetOutput());
   } else {
     if (mInputFilenames.size() > 1) {
       typedef itk::Image< InputPixelType, VImageDimension > InputImageType;