X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOGimmickView.cpp;h=d990cb56b942e509197655e39841dd74c612c30a;hb=b0843014c5482f70050fab8036c6780172e3b6c9;hp=643ede98c41beed5424a00e555f3afc4bea898af;hpb=011c2f926836abae60e9a525f819f9a66f03fac1;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index 643ede9..d990cb5 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -1,7 +1,9 @@ #include #include #include "boost/filesystem.hpp" - +#include +#include +#include namespace fs = boost::filesystem; namespace creaImageIO @@ -209,7 +211,7 @@ namespace creaImageIO "")); if(mImageExtent==0) { - mImageExtent=ie; + mImageExtent=ie; if((mImageExtent->Get(min_dim-1)<2)||(mImageExtent->Get(max_dim)>1)) { valid=false; @@ -224,7 +226,7 @@ namespace creaImageIO } } else - { + { if(mImageExtent->IsCompatible(*ie)) { if(mImageExtent->GetDimension()==max_dim && mImageExtent->Get(max_dim)>2) @@ -299,15 +301,9 @@ void GimmickView::ReadImagesNotThreaded(std::vector& s, std::vect // Create the output data if (im.size()==1) { - // Only one image : give it - vtkImageData* out = vtkImageData::New(); - GimmickDebugMessage(3, "State Check: Full Filename: " - <ShallowCopy(mReader.GetImage(im.front())); - s.push_back( out ); + // O0. } - else if (im.size()>1) // Test inutile ? JPR + else if (im.size()>1) // Test inutile ? JPR { vtkImageData* first = mReader.GetImage( im.front()); if (dimension == 2) @@ -327,15 +323,11 @@ void GimmickView::ReadImagesNotThreaded(std::vector& s, std::vect vtkImageData* out = vtkImageData::New(); out->CopyStructure(first); out->SetScalarType(first->GetScalarType()); + out->SetNumberOfScalarComponents(first->GetNumberOfScalarComponents()); int ext[6]; //first->GetExtent(ext); // JPR first->GetWholeExtent(ext); // renvoie egalement 0,0 en Z // JPR -std::cout <<"in GimmickView::ReadImagesNotThreaded GetWholeExtent ext ="; -for (int jjj=0;jjj<6;jjj++) - std:cout << " [" << jjj << "]=" << ext[jjj]; -std::cout << std::endl; - if(ext[5] == 0) { ext[5] = im.size()-1; @@ -348,35 +340,96 @@ std::cout << std::endl; // LG : TODO : Z Spacing ? - out->AllocateScalars(); - - //first->Print(std::cout); - // out->Print(std::cout); - int dim[3]; first->GetDimensions(dim); + + out->SetDimensions(dim[0], dim[1], im.size() ); + out->AllocateScalars(); + out->Update(); + unsigned long imsize = dim[0] * dim[1]; imsize = imsize * dim[2] ; // deal with multiframes // JPR + + //EED 03-11-2009 - imsize = imsize * first->GetScalarSize(); + // differents formats char , short, etc... + // differents components 1..3 ex. jpg ->RGB 3 + imsize = imsize * first->GetScalarSize() * first->GetNumberOfScalarComponents(); + + // Order the file name vector + + double spc[3]; + out->GetSpacing(spc); + spc[2]=OrderTheFileNameVector(im); + out->SetSpacing(spc); int slice = 0; std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) { - - vtkImageData* cur = mReader.GetImage( (*it)); - // void* src = cur->GetScalarPointer(0,0,0); - // void* dst = out->GetScalarPointer(0,0,slice); - memcpy(out->GetScalarPointer(0,0,slice), cur->GetScalarPointer(0,0,0), imsize); - - slice++; + vtkImageData* cur = mReader.GetImage( (*it) ); + memcpy(out->GetScalarPointer(0,0,slice), cur->GetScalarPointer(0,0,0), imsize); + slice++; } s.push_back(out); + + } // dimension == 3 + + } // size >1 + +} + //====================================================================== + + +double GimmickView::OrderTheFileNameVector(std::vector &im) +{ + double spacing=1; + typedef std::vector FileList; + FileList fileVector; + //GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New(); + GDCM_NAME_SPACE::SerieHelper *sh = GDCM_NAME_SPACE::SerieHelper::New(); + std::vector lstAux; + std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) + { + ///\TODO liberer les GDCM_NAME_SPACE::File a la fin! // JPR + GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New(); + f->SetFileName(*it); + f->Load(); + if (f->IsReadable()) + { + fileVector.push_back(f); + } else { + lstAux.push_back(*it); } + } // for + + + if ((fileVector.size()>1) && (sh->IsCoherent( &fileVector ))) + { + sh->OrderFileList(&fileVector); + spacing= sh->GetZSpacing(); + im.clear(); + int i; + for (i=0; iGetFileName() ); + } + for (i=0; i& s, std::vector im, int dimension) {