]> Creatis software - creaImageIO.git/blobdiff - bbtk/src/bbcreaImageIOItkImagesChooserDialogBox.cxx
#3123creaImageIO Bug New Normal - branch changestoITK3and4
[creaImageIO.git] / bbtk / src / bbcreaImageIOItkImagesChooserDialogBox.cxx
index 9c77a1de377b1cd7c416414c1b04e61aa985cd4b..e0c2a1ed29402d0924a5aa4bde2a34aaa86c874b 100644 (file)
 #include "bbcreaImageIOItkImagesChooserDialogBox.h"
 #include "bbcreaImageIOPackage.h"
 
+#include "itkImage.h"
+#include "itkImportImageFilter.h"
+
+/*
 // -------------------------------------------------------------------------
 // LFV: avoid itk::Concept check on 4d or superior images
 #define BBCREAIMAGEIO_ChooserDlg_Template( t, ty, di )            \
-  if( t == typeid( itk::Image< ty, di > ) )                       \
+  if( t == typeid( itk::Image< ty, di >* ) )                       \
   {                                                               \
     this->Export< itk::Image< ty, di > >( );                      \
     this->ExportVTK< itk::Image< ty, di > >( );                   \
   }
+*/
+
+// -------------------------------------------------------------------------
+// LFV: avoid itk::Concept check on 4d or superior images
+#define BBCREAIMAGEIO_ChooserDlg_Template( t, ty, di )            \
+  if( t == typeid( itk::Image< ty, di >* ) )                      \
+  {                                                               \
+    this->Export< ty , di  >( );                      \
+    this->ExportVTK< itk::Image< ty, di > >( );                   \
+  }
+
+
 // -------------------------------------------------------------------------
 
 namespace bbcreaImageIO
@@ -97,41 +113,74 @@ void ItkImagesChooserDialogBox::Process()
     delete dlg;
 }
 
-template <class TImage>
+
+//template <class TImage>
+template <typename  ty, size_t di>
 void ItkImagesChooserDialogBox::Export()
 {
-   if (dlg->getImagesSelected().size() == 1)
-   { 
+       typedef itk::Image<ty,di> TImage;
+       if (dlg->getImagesSelected().size() == 1)
+       { 
                bbSetOutputOut( dlg->getTemplatedImagesSelected<TImage>().front().GetPointer() ); 
-   } 
-   else if (dlg->getImagesSelected().size() > 1)
-   { 
-      OutputImagesITKType outVect;
-
-      typename  std::vector<typename TImage::Pointer> tempImgs= dlg->getTemplatedImagesSelected<TImage>();
-      typename std::vector<typename TImage::Pointer>::iterator it = tempImgs.begin();
-      for(;it != tempImgs.end(); ++it)
-      {
-         outVect.push_back( (*it).GetPointer() );
-      }
-      bbSetOutputOutIImages( outVect); 
-   } 
-   else
-   {
+       } else if (dlg->getImagesSelected().size() > 1){ 
+               OutputImagesITKType outVect;
+               typename  std::vector<typename TImage::Pointer> tempImgs= dlg->getTemplatedImagesSelected<TImage>();
+               typename std::vector<typename TImage::Pointer>::iterator it = tempImgs.begin();
+               for(;it != tempImgs.end(); ++it)
+               {
+                       outVect.push_back( (*it).GetPointer() );
+               } // for
+               bbSetOutputOutIImages( outVect); 
+
+               typedef  ty RGBPixelType;
+               typedef itk::ImportImageFilter< ty , di > ImportFilterType;
+               typename ImportFilterType::Pointer importFilter = ImportFilterType::New();
+
+               typename TImage::SizeType imsize;
+               imsize[0] = tempImgs[0].GetPointer()->GetLargestPossibleRegion().GetSize()[0];
+               imsize[1] = tempImgs[0].GetPointer()->GetLargestPossibleRegion().GetSize()[1];
+               imsize[2] = tempImgs.size();
+
+               typename ImportFilterType::IndexType start;
+               start.Fill( 0 );
+               typename ImportFilterType::RegionType region;
+               region.SetIndex( start );
+               region.SetSize( imsize );
+               importFilter->SetRegion( region );
+
+               const itk::SpacePrecisionType origin[ 3 ] = { 0.0, 0.0, 0.0 };
+               importFilter->SetOrigin( origin );
+
+               const itk::SpacePrecisionType spacing[ 3 ] = { 1.0, 1.0, 1.0 };
+               importFilter->SetSpacing( spacing );
+               const unsigned long int numberOfPixels2D                = imsize[0]*imsize[1];
+               const unsigned long int numberOfPixels2DInBytes = imsize[0]*imsize[1]*sizeof(ty);
+               const unsigned long int numberOfPixels3D                = imsize[0]*imsize[1]*imsize[2]*sizeof(ty);
+
+               RGBPixelType * localBuffer              = new RGBPixelType[ numberOfPixels3D ];
+               RGBPixelType * tmpLocalBuffer   = localBuffer;
+
+               it = tempImgs.begin();
+               for(;it != tempImgs.end(); ++it)
+               {               
+                       memcpy(tmpLocalBuffer, (*it).GetPointer()->GetBufferPointer(), numberOfPixels2DInBytes);
+                       tmpLocalBuffer = tmpLocalBuffer + numberOfPixels2D;
+               } // for
+
+               const bool importImageFilterWillOwnTheBuffer = true;
+               importFilter->SetImportPointer( localBuffer , numberOfPixels3D , importImageFilterWillOwnTheBuffer );
+               importFilter->Update();
+               importFilter->Register();
+           bbSetOutputOut( importFilter->GetOutput() ); 
+
+   } else {
       // warning: passing NULL to non-pointer 
       //bbSetOutputOut( NULL);
       bbSetOutputOut(0); // JPR
    }
-        // FCY To test the Output
-         //typedef itk::Image <short, 3> ImageType;
-        //typedef itk::ImageFileReader< ImageType > itkReaderType;
-     //  typename itkReaderType::Pointer reader = itkReaderType::New();
-     //
-     //  reader->SetFileName("d:\test.hdr");
-     //   reader->Update(); 
-        //reader->GetOutput()->Register();
-     //  this->bbSetOutputOut(reader->GetOutput());
 }
+
+
 template <class TImage>
 void ItkImagesChooserDialogBox::ExportVTK()
 {
@@ -145,40 +194,34 @@ void ItkImagesChooserDialogBox::ExportVTK()
                        dlg->split3Din3Dvtk<TImage>( (*it) );
                  }
                  bbSetOutputOutVImages( dlg->getVtkImagesSelected() ); 
-        } 
-        else if (dlg->getDims().front() == 4)
-        { 
+        } else if (dlg->getDims().front() == 4) { 
                // To Test
                 //  dlg->split4Din3Dvtk("d:/temp2");
                 // bbSetOutputOutVImages( dlg->getVtkImagesSelected()); 
-         } 
-        else
-        {
-                 // NOT IMPLEMENTED YET FOR DIMENSIONS > 4
-       
-        }
-        
+         } else {
+                 // NOT IMPLEMENTED YET FOR DIMENSIONS > 4     
+        } // if dlg
 }
+
 //===== 
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
 //===== 
 void ItkImagesChooserDialogBox::bbUserSetDefaultValues()
-{
+{ 
 }
+
 //===== 
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
 //===== 
 void ItkImagesChooserDialogBox::bbUserInitializeProcessing()
 {
-
 }
+
 //===== 
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
 //===== 
 void ItkImagesChooserDialogBox::bbUserFinalizeProcessing()
 {
-
 }
-}
-// EO namespace bbcreaImageIO
+
+// EO namespace bbcreaImageIO